建設中のオーバーライド可能なメソッドの呼び出しは、です。許可された - これは違法ではありません。建設中にオーバーライドメソッドの呼び出し
は
ことをお勧めではない - それは一般公開されるように、これは不完全なオブジェクトを引き起こす可能性があるので、施工時のオーバーライドメソッドを呼び出すために無分別であり、システムの予測可能性を制限します。
public class A {
final int a;
public A() {
a = method();
}
protected int method() {
return 42;
}
@Override
public String toString() {
return "A{" + "a=" + a + '}';
}
}
public class B extends A {
@Override
protected int method() {
System.out.println("this=" + this);
return 96;
}
}
public void test() {
System.out.println("B = " + new B());
}
最初の引用は、コードではなくドキュメントを参照していることに注意してください。私は唯一の問題は、の使用がの場合で、の場合はの方が適切かもしれないことを示唆しています。
オーバーライド可能なメソッドが呼び出されていない場合、すべてのオーバーライド可能なメソッドが呼び出されたことをコンストラクタのドキュメントが示しているかどうかは不明です。しかし、それはそれが書かれた精神でもなく、あなたが意味するものでもないと思われます。 –
あなたが呼び出す優先メンバーを文書化して、誰かが上書きできるようにしておき、その後は言うことができません。 > "ねえ、これを上書きするようには知らなかったし、 >副作用がない" それ以外にも、(上書きされた)クラスでメソッドを変更している人がいるので、コードが壊れる可能性があるこれを決して行うことは最善ではありません。 – Stultuske