abstract class AbstractBase {
abstract void print();
AbstractBase() {
// Note that this call will get mapped to the most derived class's method
print();
}
}
class DerivedClass extends AbstractBase {
int value = 1;
@Override
void print() {
System.out.println("Value in DerivedClass: " + value);
}
}
class Derived1 extends DerivedClass {
int value = 10;
@Override
void print() {
System.out.println("Value in Derived1: " + value);
}
}
public class ConstructorCallingAbstract {
public static void main(String[] args) {
Derived1 derived1 = new Derived1();
derived1.print();
}
}
Приведенная выше программа производит следующий вывод:
Value in Derived1: 0
Value in Derived1: 10
Я не понимаю, почему конструктор print()
in AbstractBase
всегда отображается в класс самого производного (здесь Derived1
) print()
Почему бы не DerivedClass
print()
? Может ли кто-нибудь помочь мне понять это?