2016-04-19 62 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(); 
} 

在上面的代码我需要obj获得分配给对象要么EnvAEnvB的refernce。因为我在整个“课程主”中只使用obj

+1

你可以使用一个接口来“公开”创建。请参阅https://docs.oracle.com/javase/tutorial/java/concepts/interface.html –

+0

但是在主体中,我无法使用相同的名称创建对象。它是抛出重复的变量名称错误 –

+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(); 

注意的是,为了参考objmain方法,要么是你的类的静态成员或main方法的局部变量。

+0

非常感谢您的快速回复。我的代码现在正在工作。 –

相关问题