先看代码
package com.digisky.ex;
/**
* 父类
*
* @author Jason Yang
* @version 1.0 2014-8-4下午10:18:13
*/
public abstract class F {
public F() {
setName("父类");
setId(1);
}
public abstract void setId(int id);
public abstract void setName(String id);
}
package com.digisky.ex;
/**
* 子类
*
* @author Jason Yang
* @version 1.0 2014-8-4下午10:18:09
*/
public class S extends F {
private int id;
private String name = "子类";
public S() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void setId(int id) {
this.id = id;
}
public static void main(String[] args) {
S s = new S();
System.out.println("id=" + s.id);
System.out.println("name=" + s.name);
}
}
大家认为最后的打印结果是多少呢?
--------------------------------------------------------------------------------------------------
最后打打印结果是
id=1
name=子类
我的预期是1和父类,因为父类调用后把子类初始化的name覆盖了,结果我错了。
最总发现如果子类有初始化值,子类会把父类之前设置的值覆盖,然后id并没有进行覆盖(如果ID初始化为0的话)
。
各位大神多多指导,这件事情说明我继承等底层知识还不够好啊。。。