覆写
(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
(2) 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
(3) 子类函数的访问修饰权限不能少于父类。
例子
现有父类FatherClass
,FatherClass
中有methodA
与methodB
,methodB
被methodA
调用:
/**
* Created by Shawearn on 2017/7/27.
*/
public class FatherClass {
public void methodB(String name) {
String str = "FatherClass : " + name;
System.out.println(str);
}
public void methodA(String name) {
this.methodB(name);
}
}
有子类ChildClass
继承FatherClass
,子类不覆写父类方法:
/**
* Created by Shawearn on 2017/7/27.
*/
public class ChildClass extends FatherClass {
}
新建ChildClass
实例并调用methodA
:
public static void main(String[] args) {
ChildClass c = new ChildClass();
c.methodA("Shawearn");
}
运行结果:
FatherClass : Shawearn
接下来在ChildClass
中覆写methodB
:
/**
* Created by Shawearn on 2017/7/27.
*/
public class ChildClass extends FatherClass {
@Override
public void methodB(String name) {
String str = "ChildClass : " + name;
System.out.println(str);
}
}
再次执行上面的main
方法,运行结果:
ChildClass : Shawearn
结论
当一个类中的方法被其子类覆写,此时实例化子类对象,当调用该被覆写的方法时,实际调用的是子类中的方法