浏览 95 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-06-22 关键字: 父类构造器里多态
下面这段代码:
public class Qdb extends Depend
{
int i = 30;
public Qdb()
{
print();
super.print();
i = 40;
}
void print()
{
System.out.println("Target=> " + i);
}
public static void main(String[] args)
{
new Qdb();
}
}
class Depend
{
int i = 10;
public Depend()
{
print();
i = 20;
}
void print()
{
System.out.println("Depend=> " + i);
}
}
我的预期结果: Depend=> 10 Target=>30 Depend=>20 而最终结果是: Target=> 0 Target=> 30 Depend=> 20 这里面涉及到的Java知识点有: 1, 方法的覆盖. 2, 属性在整个类初始化时的赋值时机. 3, 子类初始化时先执行父类的构造方法. 4, 当子类里有父类里同名的属性时,怎么处理? 所得到的是:子类在初始化时在先执行父类的的构造方法这不假,但当在父类的构造方法里要调用有覆盖嫌疑的方法时(也就是本例中的print方法)要调用子类里的方法. .... 后来多想想后,觉得出现"Target=> 0"很正常的: 毕竟现在是要初始一个子类的实例,JVM在背后要先调用父类里的构造方法,但这是为子类做前期准备的,在这个构造方法里要调用的方法也应该是子类自身的--也就是子类的print方法. 但上面这是演义型的解释,没有官方的正式解释.为以后的正式研究做前期的感性积累. 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |


