我正在尝试使用变量来实例化不同的类.例如:
Object blah;
class1 ex1;
class2 ex2;
public void test(int i){
if(i == 1){
blah = new class1();
} else {
blah = new class2();
}
}
Run Code Online (Sandbox Code Playgroud)
我将如何在java中执行此操作?
编辑1: 对不起伙计们,让我现在尝试更具体.
假设我有三个类:A,B和C.
A是我的主要用途,并使用B. B使用C.
问题是:
public class B1{
C instanceC;
public B1(){
instanceC = new C();
//uses a method of instanceC.
}
}
public class B2{
C instanceC;
public C(){
instanceC = new C();
//uses a method of instanceC.
}
}
Run Code Online (Sandbox Code Playgroud)
然后在A:
public class A implements MouseListener{
Object blah;
B1 instanceB1;
B2 instanceB2;
public void test(int i){
if(i == 1){
blah = new B1();
} else {
blah = new B2();
}
}
//I left the other mouseListener methods blank
public void mouseReleased(int i){
blah.instanceC.someMethod();
}
public static void main(String[] args) {
A instanceA = new A();
A.test(1);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:当我尝试使用instanceC.someMethod()或instanceC.someVariable时,它给我一个空指针异常.
我希望这很清楚.如果它令人困惑,请告诉我,我会看看我是否可以进一步简化它.感谢已经帮助过的人!
如果blah声明为Object,那将起作用(除了你使用的new是实例而不是类) - 但是使用其上没有的任何方法或属性会很尴尬Object.
通常的方法是通过接口.界面定义了class1和的共同特征class2,然后blah使用界面声明.然后,您可以轻松地将具体类别设置为一个或另一个,并且可以访问共同特征.
例如:
interface Foo {
void someCommonMethod();
}
class Class1 implements Foo {
void someCommonMethod() {
// implementation
}
}
class Class2 implements Foo {
void someCommonMethod() {
// implementation
}
}
public void test(int i){
if(i == 1){
blah = new Class1();
} else {
blah = new Class2();
}
// ...use `someCommonMethod` on `blah`...
}
Run Code Online (Sandbox Code Playgroud)