//src/com/test/animal/Animal.java
package com.test.animal;
public class Animal
{
Animal()
{
init();
}
public void init()
{
System.out.println("parent init()");
}
}
//src/com/test/animal/Dog.java
package com.test.animal;
public class Dog extends Animal
{
String name = null;
Dog()
{
super();
}
public void init()
{
System.out.println("child init()");
super.init();
name = new String("dog");
System.out.println("name: "+name);
}
public static void main(String[] args)
{
Dog d = new Dog();
System.out.println("name: "+d.name);
}
}
輸出是:成員在子類中沒有初始化
child init()
parent init()
name: dog
name: null
似乎在init()兒童被調用,但不保存NAME值!爲什麼? 如果我將NAME移動到父項,那就沒問題了。但是,保留在孩子身上更合理,因爲它是狗特有的。
此外,我可以顯式調用子的構造函數中的init()來解決這個問題。這不太好。
它不回答你的問題,但它是相關的: http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why – unludo 2012-02-22 08:24:37