在Java中,在一种类型的变量中可以包含不同的类吗?
我有两个类,类A和类B,每个类都有一个同名的方法。是否可以有一个变量,可能是在Java中,在一种类型的变量中可以包含不同的类吗?,java,Java,我有两个类,类A和类B,每个类都有一个同名的方法。是否可以有一个变量,可能是Object类型的变量,可以包含这两种类型的类并执行它们的方法 作为我的意思的一个例子: class A { public void doSomething() { ... } } class B { public void doSomething() { ... } } class Test { Object obj; if (isT
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注释的注释。这不是严格要求的,但它确实有助于确保您的代码不被破坏。如果您不小心将该方法拼写错误,或者将其放在接口(或任何超级类型)中未定义的方法上,编译器将捕获该方法并出错。