继承,抽象类,初始化属性执行顺序有关问题
继承,抽象类,初始化属性执行顺序问题
先看代码
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的话)
。
各位大神多多指导,这件事情说明我继承等底层知识还不够好啊。。。