记录下来以备日后往深地追: 父类构造器里的多态.

下面这段代码:

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方法.

但上面这是演义型的解释,没有官方的正式解释.为以后的正式研究做前期的感性积累.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值