提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、重载
重载指的是在同一个类里,同名的方法,但是参数类型,或者数量,或者是顺序不同,就叫重载.跟返回值是无关的.返回值可以相同,也可以不同.
int num=12;
public int overload(int i,String s){
num=13;
return num;
};
public void overload(String s,int i){
num=15;
};
这里需要注意的是,参数类型,参数数量,参数顺序属于符合任何一项就可以
二、重写
重写,字面意思就是重新写一遍呗。那指的是子类把从父类继承的方法,重新写一遍。
需要注意的是,重写的方法名,参数列表(参数顺序、个数、类型)必须相同。
其次,子类的访问修饰符范围必须要大于等于父类。如果父类访问修饰符是private,那子类就不能重写这个方法
最后子类抛出异常的范围也要小于等于父类,方法返回值类型与父类兼容,范围也要小于等于父类。
public class TestFather {
String s = new String();
public static void main(String[] args) {
Son son = new Son();
System.out.println(son.Test(1));//222222222
}
public String Test(int i) {
if (i == 1) {
s = "111111111";
} else if (i == 2) {
s = "222222222";
}
return s;
}
}
class Son extends TestFather {
@Override
public String Test(int i) {
if (i == 1) {
s = "222222222";
} else if (i == 2) {
s = "111111111";
}
return s;
}
}
很明显最后输出的是222222222,是因为子类重写了父类的方法,所以再次运行只会运行子类的方法。
总结
在重载里面我们要注意
1.这是在一个类里面的多态表现。
2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)。
3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准.。
在重写里我们要注意
1.一定是子类和父类的关系,只有子类才能重写父类的方法。
2.子类访问修饰符范围是要大于等于父类的。
public(全部)>protected(当前包里的类和所有子类)>default(默认)>private(本类) 根据访问修饰符范围排行。
所以如果父类的方法修饰符是private,那子类是没办法继承的。
3.重写方法的异常范围一定是要小于等于父类的异常范围的,如果父类抛出IOException,子类抛出Exception,那么编译就会发生失败,因为IOException是Exception的子类,范围比Exception小,如果子类抛出IOException,父类抛出Exception,那就符合要求了。
4.子类方法返回值范围也要小于等于父类返回值范围,比方说父类是object,那子类的返回值可以是string,但是如果父类的返回值是string,那么子类的返回值不可以是object。