1.通过 super 调用基类构造方法,
子类要继承父类,必须在子类的构造方法中将父类的构造函数进行初始化;而且父类的构造方法要在子类之前。
- 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。方法覆盖要求子类与父类的方法一模一样,否则就是方法重载(overload)!
实验代码:package src;
class P
{
public P()
{
}
public void c() {
// TODO 自动生成的方法存根
System.out.println("这是父类");
}
}
class C extends P{
public void c() {
// TODO 自动生成的方法存根
System.out.println("这是父类");
}
public C()
{c();
super .c();
// TODO 自动生成的方法存根
System.out.println("这是子类");
}
}
public class Tests {
public static void main(String[] args) {
// TODO 自动生成的方法存根
C c= new C();
}
}
验证截图:
.
1. 左边的程序运行结果是什么?
2. 你如何解释会得到这样的输出?
3. 计算机是不会出错的,之所以得
到这样的运行结果也是有原因的,
那么从这些运行结果中,你能总
结出Java的哪些语法特性?
- 运行结果:100 200 200 200 201
解释原因:parent.myValue++;
parent.printValue();//201 错误,输出结果是200 这里父类对象已经是子类型的,上面加的是父类型的,而
//下面调用的是子类型的;
((Child)parent).myValue++;//??
- parent.printValue();//输出结果是201
- 当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。这个特性实际上就是面向对象“多态”特性的具体表现。