让我们考虑两个类,SuperClassSubClass对其进行扩展:

Class SuperClass{
    int superDataMember;
}

Class SubClass extends SuperClass{
    int subDataMember;
}


我需要有另一个CompositeClass类,根据某些条件,该类可能使用上级或下级组合。我的问题是:我应该使用


SuperClassCompositeClass的一个实例


因此,我可以使用SuperClass实例或SubClass实例。
但是,如果所访问的实例属于subDataMember,则访问SuperClass的方法将如何表现?
也许instanceOf检查可能在每种方法的开头起作用?

Class CompositeClass {
    private SuperClass sc;

    public getSuperDataMember () {// some code}
    public getSubDataMember () {
    if (this.sc instanceOf SubClass)
        // some code
    }
}


SubClassCompositeClass的一个实例


因此,我将无法访问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/

10-10 10:01