最简单的理解方法我感觉就是看代码
Worker w1 = new D("zhangsan",5,100);
w1.show();
这两句就是建立Worker 类型的w1对象, 然后把一个新的D类型的对象赋值给w1,那么就会调用D里面带有参数的构造函数,. 也就是父类的引用指向子类的对象
D(String name,int id,double pay) {
super(name,id,pay);
}
也就是这句,这个构造函数里面又调用 super(name,id,pay),这个构造函数,因此就是给父类的name赋值为"zhangsan" id赋值为5, pay赋值为100
因此当你下面调用show方法的时候,父类中的show方法被子类的show方法覆写,因此调用的是子类的show方法, (上面建立的对象是父类的引用指向子类的对象,也就是说指向D这个对象所在的内存地址,从这个方面考虑你也是调用的是子类的show方法)
此时收方法里面又调用super.name 这时候肯定是zhangsan this.name 肯定是子类的name啊
这时候前几句打印的就是
编程
zhangsan
lisi
System.out.println(w1.name);
System.out.println(w1.id);
System.out.println(w1.pay)
这几句打印的是对象w1的name id pay
前面不是说新建立对象D("zhangsan",5,100),并把对象D赋值给w1吗?
因此这里w1 肯定指向的是这里zhangsan 5 100了
有些时候只是我们自己想的太多,而把自己绕进去.
|