2016-06-16 1 views
-1

私はゲームに取り組んでいます。この問題は、変数がクラスのインスタンスに設定されていて、そのクラスコンストラクタが変数を設定している場合、 ?例:コンストラクタがそのインスタンスをオーバーライドすることができます

public class MainClass { 
    public static MainInterface mainInterface; 
    public static void main(String[] args) { 
     mainInterface = new SubClass1(); 
    } 
} 

public interface MainInterface { 
    public void method(); 
} 

public class SubClass1 implements MainInterface { 
    public SubClass1() { 
     MainClass.mainInterface = new SubClass2(); 
    } 
    public void method() { } 
} 

public class SubClass2 implements MainInterface { 
    public void method() { } 
} 

したがって、この例では、mainInterfaceはSubClass1またはSubClass2のインスタンスになりますか?

+3

ベストアンサー:これをテストするとどうなりますか?また、おそらく、静的なファクトリメソッドを使用して、コンストラクタを非公開にする必要があります。 –

+1

これをデバッガで実行すると、デバッガでどのように動作するのか確認できます – ControlAltDel

+0

コンストラクタの終了時に 'SubClass2'が上書きされるため、' SubClass1'になります。 – 4castle

答えて

3

試してみてください! :)単純なSystem.out.println(mainInterface.getClass())はクラス値を表示します。

私は、プロセスは次のように動作することをかなり確信している:

  • SubClass1のコンストラクタは、新しい SubClass2オブジェクトにmainInterfaceを設定し、呼ばれています。
  • SubClass1のコンストラクタが終了し、mainInterfaceに割り当てられ、mainInterfaceが新たに作成されたSubClass1オブジェクトになります。
関連する問題