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()
inAbstractBase
コンストラクターが常に最も派生したクラスにマップされる理由がわかりません(here Derived1
)print()
なぜにしないDerivedClass
のprint()
ですか?誰かがこれを理解するのを手伝ってくれますか?