我有class A
,class B
和class C
。
在class C
中,我声明了如下变量:
private A a;
private B b;
private ? thirdVariable;
我想声明第三个变量,其数据类型可以是A或B 。
这样我就可以根据自己的意愿分配这个变量 a
或b
的值。
答案 0 :(得分:2)
如果A和B之间没有关系,则无法执行此操作。如果要执行此操作,则应使用将由A&B扩展的接口/类。
class X{}
class A extends X{
}
class B extends X{
}
private X thirdVariable;
如果您真的想使用Generic,则在类C中使用Generic构造函数,然后根据如下所示的Generic传递A/B
的对象。
class C<T> {
private T thirdVariable;
C(T t) {
thirdVariable = t;
}
}
创建C对象时,可以指定并传递如下所示的对象类型。
A a = new A();
C<A> c1 = new C<A>(a);
B b = new B();
C<B> c2 = new C<B>(b);
答案 1 :(得分:1)
您可以创建(可能是抽象的)超类(我们将其称为class X
),并使A
和B
都从其扩展。然后,您的第三个变量可以声明为:
private X thirdVariable;
类似地,您可以创建一个接口(我们称其为interface Y
)并使A
和B
都实现它。然后,您的第三个变量可以声明为:
private Y thirdVariable;
因此,基本上,您想充分利用多态性,因为泛型没有足够的灵活性来表达想要的类型关系。
答案 2 :(得分:1)
您可以将Polymorphism
与(abstract) class
或Interface
一起使用
Interface
:
public Interface Parent{ }
public class A implements Parent { }
public class B implements Parent { }
public class C {
private A a;
private B b;
private Parent thirdVariable;
}
(abstract) class
:摘要是可选的,取决于您必须进行的设计和功能
public (abstract) class Parent{ }
public class A extends Parent { }
public class B extends Parent { }
public class C {
private A a;
private B b;
private Parent thirdVariable;
}