これがここで何十回も質問され、答えられたことは間違いありませんが、満足のいく答えを見つけることができません。
私には、このような静的メソッドを介して抽象親クラスによってのみインスタンス化したいクラスのファミリーがあります(コンパイルを試みずに入力しているここにタイプミスがある可能性があります)。
public abstract class Papa {
public static Papa newInstance() {
String strClass = Papa.figureOutTheNameOfChildClassToInstantiate();
Papa papa = (Papa) Class.forName(strClass).newInstance();
return papa;
}
public abstract void doSomething();
...
}
public class Child extends Papa {
public void doSomething() { /* Do something */ }
}
それは多かれ少なかれ私が今持っているものです。私がやりたいのは、子がファクトリメソッドPapa.newInstance()によってのみインスタンス化できることを確認することです。子の引数のないコンストラクターをプライベートにすることでこれを実行しようとしましたが、Papaはそれをインスタンス化できません。
だから、私の質問は、子インスタンスがファクトリメソッドPapa.newInstance()によってのみ作成されることをどのように確認できますか?