让我们考虑两个类,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
实例的第一个! 最佳答案
请注意,SubClass
也是SuperClass
,因此您不会像您所指出的那样以SuperClass
的身份访问组件。
此外,还有第三个选择,使用参数多态性:
class CompositeClass<T extends SuperClass>
{
private T component;
...
}
使您可以使其适应特定情况。如果
SuperClass
的接口未提供,则这将要求您重写其他方法。关于java - 作文课;使用 super 还是子?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28684721/