重写的前提:父类有,子类也有的函数才可以重写。
含义:子类继承了父类对于该函数的声明,但是具体的函数体需要由子类去重新定义。
什么时候需要重写?
子类需要在父类的基础上升级某些功能,子类可以继承该功能的声明并重新去定义该功能。 ——DemoA中的showA进行了重写
子类重写父类函数的注意事项:
(1)函数名必须保持一致;
(2)返回值类型必须保持一致;
(3)参数列表必须保持一致;
(4)子类的权限必须大于等于父类函数的权限(除了private,父类中private类型的数据子类是获取不到的)。
public class ExtendsDemo04 {
public static void main(String[] args) {
DemoB db = new DemoB();
System.out.println("==============");
db.showA(); //打印的是DemoB自己的showA
System.out.println("==============");
db.showB(); //打印的是DemoB继承而来的showB
System.out.println("==============");
db.showC(); //打印的是DemeB自己的showC
}
}
class DemoA {
public int num01 = 10;
public int num02 = 20;public DemoA() {
System.out.println("DemoA Constructor...");
this.num01 = 666;
num02 = 999;
showA();
showB();
}
public void showA() {
System.out.println("DemoA showA...");
System.out.println(this.num01);
System.out.println(num02);
}
public void showB() {
System.out.println("DemoA showB...");
System.out.println(this.num01);
System.out.println(num02);
}
}
class DemoB extends DemoA {
public int num01 = 100;
public int num03 = 300;public DemoB() {
super();
System.out.println("DemoB Constructor...");
showA();
showB();
}@Override
public void showA() {
System.out.println("DemoB showA...");
System.out.println(num01);
System.out.println(num02);
System.out.println(num03);
System.out.println(super.num01);
System.out.println(super.num02);
super.showA();
}public void showC() {
System.out.println("DemoB showC...");
System.out.println(num01);
System.out.println(num02);
System.out.println(num03);
System.out.println(super.num01);
System.out.println(super.num02);
}
}