作文课;使用super还是sub?

时间:2015-02-23 22:26:48

标签: java oop design-patterns

让我们考虑扩展它的两个类SuperClassSubClass

Class SuperClass{
    int superDataMember;
}

Class SubClass extends SuperClass{
    int subDataMember;
}

我需要另一个CompositeClass类,可以根据某些标准使用超级或子组合。我的问题是:我应该使用

  1. 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
          }
      }
      
  2. SubClass

    CompositeClass的实例
    • 因此,我将无法访问SuperClass个实例!

      Class CompositeClass {
          private SubClass sc;
      
          public getSuperDataMember () {// some code}
          public getSubDataMember () {// some code
          }
      }
      
  3. 实施两个版本的CompositeClass,第一个是SuperCompositeClass,其实例为SuperClass,第二个SubCompositeClass扩展第一个SubClass实例{ {1}} <!/ p>

2 个答案:

答案 0 :(得分:2)

请注意,SubClass也是SuperClass,因此您不会像您指出的那样SuperClass失去访问该组件的能力。

此外,还有第三种选择,使用参数多态:

class CompositeClass<T extends SuperClass>
{
  private T component;
  ...
}

这样您就可以根据具体情况进行调整。如果SuperClass的接口没有提供,则需要覆盖其他方法。

答案 1 :(得分:0)

从你的问题中我听起来像你的两个班级可能更好,因为兄弟姐妹实施抽象类的方法而不是父母子女关系。这允许您在需要时使用instanceOf轻松使用多态。当孩子需要保留父母的所有信息和功能时,最纯粹使用父子关系。