我觉得
1、先执行基类的显示初始化int i = 99;
2、执行基类的构造函数,
Base(){
amethod();
}
3、 public void amethod(){
System.out.println("Base.amethod()");
}
4、派生类的显示初始化, int i = -1; 5、派生类的构造函数,这里没有。所以该输出Base.amethod() 呀,为什么呀?
1、先执行基类的显示初始化int i = 99;
2、执行基类的构造函数,
Base(){
amethod();
}
3、 public void amethod(){
System.out.println("Base.amethod()");
}
4、派生类的显示初始化, int i = -1; 5、派生类的构造函数,这里没有。所以该输出Base.amethod() 呀,为什么呀?
Base b = new Derived();
首先实例化出来的是子类而不是父类
然后调用父类的构造方法,调用amethod()方法,但这个方法在子类中被覆盖了.
class Parent{
private void method1(){
System.out.println("Parent's method1()");
}
public void method2(){
method1();
}
}
class Child extends Parent{
public void method1(){
System.out.println("Child's method1()");
}
public static void main(String args[]){
Parent p = new Child();
p.method2();
}
}输出Parent's method1()这为什么没多态了
还是多态,是调用子类中的method2方法,子类中的方法代码如下
public void method2(){
super.method2();
}
意思是child继承了Parent的非私有的成员变量和方法。
这样,child类中如果没有重写parent中的方法,那么它会调用父类中的方法相当于如下代码
public void method2(){
super.method2();
}
但是这个时候,父类调用的方法method1()等价于
public void method2(){
this.method1();
}
不知道你现在明白了没有
不会被覆盖
学习啦