一、重写Override:
重写是针对方法而言,发生在父类与子类之间。子类继承父类后,子类要改变父类已经有的行为,就可以采用重写的方式。和父类定义同名方法,参数个数、参数类型一致。这样调用这个方法时,根据就近原则,默认就调用新覆盖的方法,从而达到改写目的。
1、方法名相同,参数个数、参数类型相同;
2、子类方法的访问权限应比父类方法的访问范围更大或相等;
(public>protected>default>private)
3、子类方法返回值类型应比父类方法返回值类型更小或相等;
4、子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等。
--例子:
public class FuLei {
public static void main(String[] args) {
ZiLei z = new ZiLei();
z.print();
}
public void print(){
System.out.println("父类");
}
}
class ZiLei extends FuLei {
@Override
public void print() {
System.out.println("子类" ); //子类会覆盖父类中的方法
}
}
--结果:
子类
二、重载Overload:
1、在同一个类中方法名相同;
2、参数个数不同;
3、参数的个数相同,但类型不同;
4、返回类型可以不同、访问修饰符可以不同、抛出的异常可以不同。
--例子:
public class OverLoad{
public static void main(String[] args) {
OverLoad o = new OverLoad();
o.print();
o.print("ZY~");
}
public void print(){
System.out.println("Hello");
}
public void print(String name){
System.out.println("Hello "+name);
}
}
--结果:
Hello
Hello ZY~
三、总结:
比较 | 重载 | 重写 | |
---|---|---|---|
相同点 | 方法名 | 都可以用于抽象方法和非抽象方法 | |
方法类型 | 都可以用于抽象方法和非抽象方法 | ||
不同点 | 参数列表 | 参数列表必须不一致 | 参数列表必须一致 |
返回值类型 | 返回值类型不做限制 | 返回值类型必须一致 | |
范围 | 重载同一个类中的方法 | 在继承中,子类重写父类的方法 | |
次数 | 方法的重载可以被重载多次,也可以用多个重载方法 | 父类的方法只能被重写一次,重写一般是两个方法之间 | |
权限 | 对权限没有要求 | 被重写的方法不能拥有更严格的权限 | |
调用 | 根据传递的参数来决定调用哪个方法 | 根据调用方法的对象来决定调用哪个方法 |
面试题:
重写和重载的区别?
(答案见文末)
面试题答案:
见上文?