Java学习笔记17---方法的重载与重写
重载是指,一个类中定义了一个成员方法后,通过修改参数个数、参数类型或参数顺序,重新实现该方法,则这两个方法互为对方的重载方法。
重写是指,子类重新实现父类的成员方法。
重载后的方法,与原方法相比:
(1).方法名相同,参数个数、参数类型及参数顺序至少有一个不同;
(2).返回值类型与访问权限修饰符可以相同也可以不同,只修改这两项不能算重载;
(3).静态成员方法也可以重载,重载后的方法也可以是非静态成员方法;
(4).可以有多个重载方法。
子类重写后的方法,与父类的方法相比:
(1).方法名、参数个数、参数类型及参数顺序必须一致;
(2).返回值类型为基本数据类型时,不可以修改,返回值为类类型时,可以修改,具体参见笔记13;
(3).访问权限修饰符可以修改也可以不修改,如果修改的话,必须要大于父类方法的访问范围;
(4).静态成员方法也可以重写,但重写后的方法只是被隐藏,并未覆盖父类的方法,具体参见笔记12;
(5).一个子类只能重写父类的某个成员方法一次,否则,子类就会出现重名方法,会报错。
重载是同一个类内部的多个成员方法互为重载方法,重写是子类的成员方法重写了父类的成员方法;重载一般是为了创建一组要完成相似任务的成员方法,重写的目的是为了实现多态,实现多态有3个条件:继承、重写、向上转型,缺一不可。
作者: 蝉蝉
请尊重作者劳动成果,转载请在标题注明“转载”字样,并标明原文链接:
http://www.cnblogs.com/chanchan/p/7906876.html
下面是简单的程序示例。
Person类是Student类的父类,TestMain类是测试类,具体代码如下:
Person类的代码:
package human;
public class Person {
String name;
int age;
String gender;
public Person() {
}
//笔记17:重载:方法名不变,参数的个数、类型及顺序至少与原方法有一个不同
//可以更改返回值类型及访问权限修饰符,但不是必须的,只修改这两项也不算重载
public int overLoadP(int i, String s) {
System.out.println("i = " + i + ", " + s);
return i+;
}
// public char overLoadP(int i, String s) {
// return i+1;
// }
//可以更改返回值类型及访问权限修饰符
protected char overLoadP(int i) {
System.out.println("i = " + i);
return (char)(i+);
}
public int overLoadP(int i, int n) {
System.out.println("i = " + i + ", n = " + n);
return i+n;
}
public int overLoadP(String s, int i) {
System.out.println(s + ", i = " + i);
return i;
}
static void overLoadPS() {
System.out.println("静态成员方法可以重载吗");
}
void overLoadPS(int i) {
System.out.println("静态成员方法可以重载");
}
}
Student类的代码:
package human;
public class Student extends Person {
String stuNumber;
int score;
public Student() {
}
//笔记17:重写:方法名、参数的个数、类型及顺序都要与父类方法一致
//子类重写时,只有返回值为类类型时,才可以更改返回类型,且只能改为返回值类型的子类
//子类访问权限修饰符的范围要大于父类的
// public char overLoadP(int i, String s) {
public int overLoadP(int i, String s) {
System.out.println("子类重写:i = " + i + ", " + s);
return i+1;
}
}
TestMain类的代码:
package human;
public class TestMain {
public static void main(String[] args) {
Person per = new Person();
Student stu = new Student();
per.overLoadP(1);
per.overLoadP(1, 2);
per.overLoadP(1, "bokeyuanchanchan");
per.overLoadP("bokeyuanchanchan", 1);
per.overLoadPS(2);
per.overLoadPS();
stu.overLoadP(1,"博客园蝉蝉");
}
输出结果如下:
i = 1
i = 1, n = 2
i = 1, bokeyuanchanchan
bokeyuanchanchan, i = 1
静态成员方法可以重载
静态成员方法可以重载吗
子类重写:i = 1, 博客园蝉蝉
分析如下:
关于重载:
(1).最先定义了public int overLoadP(int i, String s)这个方法,方法名为overLoadP,有两个参数,分别为int型和String型,返回值为int型。
(2).随后又定义了3个重名的方法,分别为:
protected char overLoadP(int i)
public int overLoadP(int i, int n)
public int overLoadP(String s, int i)
这3个方法与原方法的参数不同点分别在于,参数个数不同、参数类型不同、参数顺序不同,这3个方法都是原方法的重载方法,这4个方法互为对方的重载方法。
其中protected char overLoadP(int i),返回值类型与访问权限修饰符也与原方法不同,可见这两项是可以修改的,但只修改这两项并不能算重载,见(3)。
(3).Person类中下面注释掉的代码行,与第1个方法仅返回值不同,会出现“Duplicate method voerLoadP(int, String) in type Person”的错误。也就是说,仅返回值类型不同是不能算重载的。
// public char overLoadP(int i, String s) {
// return i+1;
// }
(4).由结果可知,静态成员方法也可以重载。
关于重写:
(5).子类重写了父类的public int overLoadP(int i, String s),方法名、参数个数、参数类型、参数顺序及返回值类型都与父类一致。
对于代码中注释掉的行,不注释的话会提示返回值类型与父类返回值不一致的错误。
// public char overLoadP(int i, String s) {
Java学习笔记17---方法的重载与重写的更多相关文章
- Java学习笔记之---方法和数组
Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...
- Java学习笔记day05_方法重载
1.方法的重载overload 在同一个类中, 允许出现同名的方法, 只要方法的参数列表不同即可. 参数列表不同: 参数个数不同, 参数类型不同, 顺序不同. public class MethodO ...
- 0019 Java学习笔记-面向对象-方法
方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一 ...
- 【原】Java学习笔记008 - 方法(函数)
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 方法/函数 Met ...
- java学习笔记5(方法)
方法: 1.如何创建方法 修饰符 返回值类型 方法名(参数){被封装的代码段} 2.方法的定义和使用的注意事项: a:方法不能定义在另一个方法里面: b:方法 名字和方法的参数列表,定义和调用时 ...
- java学习笔记13-重写与重载
重写 重写是子类对父类允许访问的方法实现过程进行重新编写,返回值和参数都不能变. 重写方法不能抛出新的检查异常和比被重写方法更加宽泛的异常 访问权限不能比被重写方法低 声明为final的方法不能被重写 ...
- C#学习笔记_11_方法的隐藏和重写
11_方法的隐藏和重写 方法的隐藏 需要使用到关键字:new 方法的重写 虚函数: 使用关键字virtual修饰的函数 虚函数可以被子类隐藏,也可以被子类重写 非虚函数只能被子类隐藏 关键字:over ...
- Java学习笔记之方法重载,动态方法调度和抽象类
一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程 ...
- Java学习笔记之方法重载
被重载的方法必须具有不同的参数列表.不能基于不同修饰符或返回值类型来重载方法. package welcome; public class TestMethodOverloading { public ...
随机推荐
- 微信小程序- 生成二维码
wx.request({ // 获取token url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential', ...
- UVa 10954,Add All
Huffman编码简化版,优先队列搞定. 1A 调试的时候发现一个问题..木有想明白...问题代码里给出,哪位大神给解释下. #include <iostream> #include &l ...
- LINUX 笔记之常用打包压缩命令
1.将所有.jpg文件打成一个名为all.tar的包 tar -cf all.tar *.gif 2.将所有.gif文件追加到all.tar tar -rf all.tar *.gif 3.更新原来t ...
- toString方法的用处
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; color: #a5b2b9 } p.p1 { margin: 0.0px ...
- ajax+php(环境搭建+测试)
在学习JavaScript,jQuery的ajax部分的时候,一直不明白要如何进行,不知道服务器要怎么弄,什么都不知道,当初在学ajax的时候,除了看一下ajax的内容,实践极少,因为,不知道要怎么做 ...
- SpringMVC , Spring , MyBatis 文件上传
学习一下文件上传下载,为图片上传做准备,感觉有一个世纪没玩过上传下载了,边敲代码边记录,请各路大神指教: 参考:http://blog.csdn.net/wjycgl/article/details/ ...
- 还原NuGet程序包
官网:https://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx 在获取团队中的项目或者下载他人的项目Demo后,运行项目有时会提示某些dll找不到 ...
- cookie在不同域名domain、path下的读取规则
cookie 子域名可以读父域名中的cookie 如在 .ping.com域下注入cookie,则该子域下的网页如p1.ping.com.p2.ping.com 都能读取到cookie信息 path的 ...
- CentOS7配置更新国内yum源
备份本地yum源文件 cd /etc/yum.repo.d/ mv CentOS-Base.repo CentOS-Base.repo.bakeup 下载国内yum源 阿里云yum源 wget htt ...
- jQuery选择器(属性过滤选择器)第六节
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...