方法的重写
1.什么是方法的重写?
子类继承父类之后,就拥有了符合权限的父类的属性和方法,但是当父类的方法不符合子类的要求的时候,子类也可以重新的书写自己想要的方法。
所以,方法的重写,也叫方法的覆盖,即子类继承父类的方法后,由于父类的方法不满足子类的需求,子类重新书写该方法。
2.方法重写的条件
前提条件:必须是子类,才能重写父类中的具有继承权限的方法。
从书写一个方法的顺序要求:
权限修饰符必须大于或者等于父类的权限修饰符;
方法名、返回值类型、参数一致;
抛出的异常必须比父类的要小。
在第4点有每一个不符合的错误。
3.方法重写实例
父类:
package com.dh.oop;
public class Parent {
public void print(){
System.out.println("我是爸爸");
}
}
子类:
package com.dh.oop;
public class Son extends Parent{
}
- 当子类没有重写父类的方法的时候,new一个子类对象,调用该方法:
package com.dh.oop;
public class OverrideDemo {
public static void main(String[] args) {
Son son = new Son();
son.print();
}
}
结果:
因为此时子类没有该方法,但是继承了父类的方法,所以调用的是父类的方法。
现在子类中重写该print方法:
package com.dh.oop;
public class Son extends Parent{
@Override
public void print() {
System.out.println("我是儿子");
}
}
-
当子类重写了父类的方法之后,new子类对象,调用该方法:
(小tip:alt+ins可以直接选择并生成想重写的方法)
package com.dh.oop;
public class OverrideDemo {
public static void main(String[] args) {
Son son = new Son();
son.print();
}
}
结果:
因为此时在子类中重写了父类的方法,所以子类对象调用的就是子类的方法了。
4.不满足重写方法的情况
-
权限修饰符小于父类:
-
返回值不一样:
-
方法名不一样:
-
参数不一样:
-
抛出的异常大于父类:
5.重写与重载的区别
- 重载:重载发生在同一个类中,方法名相同,参数类型不同(顺序、个数、类型),通过参数的类型来区别调用的是哪一个方法。
- 重写:重写发生在子类中,方法名、返回值、参数相同,权限修饰符要大于或等于父类方法中的权限修饰符,抛出的异常要小于父类方法中抛出的异常,通过调用的对象来区别调用的是父类的方法还是子类的方法。
本人水平有限,若有错误,请指出,感激不尽~