2016-04-19 15 views
0

同じ名前の参照変数を作成し、その環境に応じて同じクラスオブジェクトを割り当てようとしています。以下のサンプルコードを確認してください。上記のコードで異なるクラスのオブジェクトをインスタンス化するために同じ変数名を使用する方法

class EnvA{ 

public void create(){ 
..... 
    } 
} 
class EnvB{ 

public void create(){ 
..... 
    } 
} 

class main{ 
EnvA obj = null; 
EnvB obj= null; 
public static void main(string[] args) 
    if(itisEnvB) 
     obj = new EnvA(); 
    else 
     obj = new EnvB(); 
    //create method should be called depending on which environment is set 
    obj.create(); 
} 

私はEnvAまたはEnvBのいずれかのrefernceをオブジェクトに割り当てられて取得するobjを必要としています。私は私の全体の "クラスメイン"でobjだけを使用するので。

+1

インターフェイスを使用して、作成を公開することができます。 –

+0

https://docs.oracle.com/javase/tutorial/java/concepts/interface.htmlを参照してください。メインでは、オブジェクト作成に同じ名前を使用できません。それは重複変数名のエラー –

+0

を参照してくださいエランの答えを参照してください:) –

答えて

6

create()メソッドを持つインターフェイスを定義し、EnvAEnvBの両方に実装する必要があります。

objのタイプは、そのインタフェースのタイプになります。

public interface Createable 
{ 
    public void create(); 
} 

class EnvA implements Createable {...} 

class EnvB implements Createable {...} 

... 

Createable obj = null; 
if(itisEnvB) { 
    obj = new EnvA(); 
} else { 
    obj = new EnvB(); 
} 
obj.create(); 

あなたmain方法でobjを参照するために、それはどちらかあなたのクラスの静的メンバまたはmain方法のローカル変数であることに注意してください。

+0

すみません、ご返信ありがとうございます。私のコードは今働いています。 –

関連する問題