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

在Java中,在一种类型的变量中可以包含不同的类吗?,java,Java,我有两个类,类A和类B,每个类都有一个同名的方法。是否可以有一个变量,可能是Object类型的变量,可以包含这两种类型的类并执行它们的方法 作为我的意思的一个例子: class A { public void doSomething() { ... } } class B { public void doSomething() { ... } } class Test { Object obj; if (isT

我有两个类,类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();
}
我仔细思考了一下,但我不确定它是否可以用来做我想做的事情


任何帮助都很酷,谢谢。

您能做的最好的事情就是创建一个接口并让两个类都实现它。这样,您就可以拥有一个通用类型,您可以将这些对象分配给该类型,而不必执行实例检查或强制转换

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();
}
这是关键。使类实现定义方法的接口:

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

如果
A
B
都要扩展一个超类/实现一个包含
doSomething
方法的接口
C
,那么您可以使用
C=newa()
C=newb()
,并调用
C.doSomething()
。谢谢,我相信这就是解决方案。我将尝试一下,看看它是否是我想要的。只是一个关于@Override注释的注释。这不是严格要求的,但它确实有助于确保您的代码不被破坏。如果您不小心将该方法拼写错误,或者将其放在接口(或任何超级类型)中未定义的方法上,编译器将捕获该方法并出错。