是否可以在Java中包含一种类型的变量中的不同类?

时间:2018-04-13 18:41:32

标签: java

我有两个类,A类和B类,每个类都有一个同名的方法。是否有可能有一个类型Object的变量,它可以包含两种类型的类并执行它们的方法?

作为我的意思的一个例子:

class A {
    public void doSomething() {
        ...
    }
}

class B {
    public void doSomething() {
        ...
    }
}

class Test {
    Object obj;

    if (isTrue) 
        obj = new A();
    else
        obj = new B();

    obj.doSomething();
}

我调查了反思,但我不确定它是否可以用来做我想做的事。

任何帮助都很酷,谢谢。

2 个答案:

答案 0 :(得分:3)

您可以做的最好的事情是创建一个接口并让两个类实现它。这样,您可以使用单个公共类型来分配这些对象,而不必进行实例检查或转换。

public interface C {
    void doSomething();
}

public class A implements C {
    @Override
    public void doSomething() {
    }
}

public class B implements C {
    @Override
    public void doSomething() {
    }
}

public class Test {
    public C obj;

    obj = new A(); // or new B()

    obj.doSomething();
}

答案 1 :(得分:1)

Java Polymorphism是关键。让您的类实现一个定义方法的接口:

interface DoSomethingable {
  void doSomething();
} 
class A implements DoSomethingable {
public void doSomething() {
    ...
  }
}
class B implements DoSomethingable {
public void doSomething() {
    ...
  }
}
class Test {
  public static void main(String... args) {
    DoSomethingable obj;

    if (isTrue) {
      obj = new A();
    } else {
      obj = new B();
    }

    obj.doSomething();
  } 
}