【问题标题】:What is the best use of Inheritance other than reduce redundant code?除了减少冗余代码之外,继承的最佳用途是什么?
【发布时间】:2012-01-07 19:02:51
【问题描述】:

继承的最佳用途是什么,除了它会减少冗余代码!
举个例子
A类:基类
B类:子类
和C级。

 CLASS A
    ^
    |                And     CLASS C
    |
    |
  CLASS B

我可以通过继承在 B 类中使用 A 类中的方法。
同样,我可以在 C 类中使用 A 类的方法,
通过创建 A 类的实例。(比如 A 是公共的)
使用继承,只减少创建新对象/实例?
请帮助我更好地理解!

【问题讨论】:

标签: java oop inheritance coding-style instance


【解决方案1】:

一个很大的好处是多态性。如果类 B 和 C 都继承自 A,那么每当需要 A 类型的对象时,可以将其替换为 B 类型的对象或 C 类型的对象。假设在 B 和 C 中重写了相应的方法,则此根据您传递的对象,获得不同的行为非常方便。

例子:

class A {
    public void foo() { System.out.println("A"); }
}

class B extends A {
    public void foo() { System.out.println("B"); }
}

class C extends A {
    public void foo() { System.out.println("C"); }
}

然后:

public static void printMessage(A obj) {
    obj.foo();
}

public static void main(String[] args) {
    A b = new B();
    printMessage(b); // prints 'B'
    A c = new C();
    printMessage(c); // prints 'C'
}

【讨论】:

    【解决方案2】:

    继承的要点是多态性:允许其他类使用ClassB的实例,只知道它可以用作ClassA

    我最喜欢的例子是流——我可以很容易地编写一个 copyStream 方法,以 InputStreamOutputStream 为例,只使用在这些类型上声明的方法。然后我可以将FileInputStream 复制到ByteArrayOutputStream,或者使用与网络相关的流等,所有这些都无需更改copyStream 方法中的任何代码。

    【讨论】:

      【解决方案3】:

      使用继承的主要原因不是删除冗余代码。

      继承和所有可能的魔法是 OOP 的关键和中心点。扩展一个类不仅允许您使用它的功能,还可以修改(通过多态)并添加更多功能。

      【讨论】:

        【解决方案4】:

        不同之处在于需要了解将 B 类传递给作用于 A 类的函数的能力。从这个意义上说,B 是 A 的类型,其中 C 拥有或拥有 A。差异很小,只有显着在某些情况下。

        这并不是说差异通常在代码中明确。通常人们会在他们真正想要所有权时进行继承,有时他们会在对象确实是其他类型时进行所有权。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-30
          • 2010-11-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-25
          相关资源
          最近更新 更多