public class Parent {
Parent() {
test();
}
public static void main(String[] args) {
new Child();
}
protected void test() {
System.out.println("Hello from Parent");
}
}
class Child extends Parent {
private final String someString;
Child() {
someString = "some Text";
}
protected void test() {
System.out.println("Hello from Child");
System.out.println(someString);
}
}
/**
* Output:
* Hello from Child
* null
*/
вторник, 31 января 2012 г.
Опасность при вызове методов из конструктора
Если в конструкторе базового класса вызвать метод, который переопределен в дочернем, то при создании дочернего класса в конструкторе базового будет вызван метод дочернего класса, хотя очередь инициализации этого класса еще не настала. Это может привести к ошибкам. Например, вызванный метод может использовать переменные, которые еще не были инициализированы. Надо стараться избегать вызова методов в конструкторах. Можно смело вызывать только методы, помеченные как final в текущем классе или private, т.к. они не переопределяются.
Подписаться на:
Сообщения (Atom)