让我们考虑扩展它的两个类SuperClass
和SubClass
:
Class SuperClass{
int superDataMember;
}
Class SubClass extends SuperClass{
int subDataMember;
}
我需要另一个CompositeClass
类,可以根据某些标准使用超级或子组合。我的问题是:我应该使用
SuperClass
CompositeClass
的实例
SuperClass
实例或SubClass
实例。subDataMember
,那么访问SuperClass
的方法会如何表现?也许instanceOf
检查可能在每种方法的开头都有用吗?
Class CompositeClass {
private SuperClass sc;
public getSuperDataMember () {// some code}
public getSubDataMember () {
if (this.sc instanceOf SubClass)
// some code
}
}
SubClass
CompositeClass
的实例
因此,我将无法访问SuperClass
个实例!
Class CompositeClass {
private SubClass sc;
public getSuperDataMember () {// some code}
public getSubDataMember () {// some code
}
}
实施两个版本的CompositeClass
,第一个是SuperCompositeClass
,其实例为SuperClass
,第二个SubCompositeClass
扩展第一个SubClass
实例{ {1}} <!/ p>
答案 0 :(得分:2)
请注意,SubClass
也是SuperClass
,因此您不会像您指出的那样SuperClass
失去访问该组件的能力。
此外,还有第三种选择,使用参数多态:
class CompositeClass<T extends SuperClass>
{
private T component;
...
}
这样您就可以根据具体情况进行调整。如果SuperClass
的接口没有提供,则需要覆盖其他方法。
答案 1 :(得分:0)
从你的问题中我听起来像你的两个班级可能更好,因为兄弟姐妹实施抽象类的方法而不是父母子女关系。这允许您在需要时使用instanceOf轻松使用多态。当孩子需要保留父母的所有信息和功能时,最纯粹使用父子关系。