1. 方法的覆写:子类定义与父类方法名称相同,参数个数和类型完全相同的方法。
2. 如果方法覆写,那么在实例化子类的时候,调用的将会是子类所覆写过的方法。
3. 覆写的意义在于优化父类的功能。
4. 子类方法覆写后,如果想要调用父类的方法,必须使用 super.方法()
5. 只要是在子类中调用父类的方法,一定要在方法前追加 super.方法()
class Older { public void print(){ System.out.println("父类的方法"); } } class Young extends Older { public void print(){ System.out.println("子类覆写了父类的方法"); } } public class Demo{ public static void main(String args[]){ new Young().print(); } } /*--------------------------------------------- E:\Javacode>java Demo 子类覆写了父类的方法 E:\Javacode>*/
方法覆写的限制:
1. 被覆写的方法不能拥有比父类更为严格的访问权限
public > default > private
a. 如果父类用 private 定义,那么子类可以为 private, default, public
b. 如果父类用 default 定义,那么子类可以为 default, public
c. 如果父类用 public 定义,那么子类只能用 public 定义
方法重载与覆写的区别:
重载:方法名称相同,返回值,参数类型和个数不同,没有权限限制,发生在 一个类中
覆写:方法名称,返回值,参数类型和个数都相同,被覆写的方法不能有更严格的控制权限,发生在继承关系中
属性覆盖:子类定义了与父类相同名称的成员
class Old { String info = "我是你爸爸"; } class Son extends Old { String info = "我是你儿子"; //属性覆盖--如果父类的 info 用 private 封装了,那么子类的info就和父类没有什么关系了 public void fun(){ System.out.println(super.info); System.out.println(this.info); } } public class Demo{ public static void main(String args[]){ Son son = new Son(); son.fun(); } } /*--------------------------------------------- E:\Javacode>java Demo 我是你爸爸 我是你儿子 E:\Javacode>*/
super 和 this 的区别:
1. 在程序类中使用 this 表示先从本类查找所需要的属性或者方法。如果本来不存在再查找父类定义。
2. super 表示不查找子类,直接查找父类的属性或者方法。
3. this 和 super 都可以进行构造方法的调用, this() 调用的是本类的构造方法, super() 是由子类调用父类的构造,两者都需要放在构造方法的首行,所以不能同时出现。
4. this 可以表示当前对象。