//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() в конструкторе child, чтобы решить эту проблему. Это не так хорошо.
Это не ответит на ваш вопрос, но это связано: http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why – unludo