Как лучше всего использовать Inheritance, кроме сокращения избыточного кода? - PullRequest
2 голосов
/ 28 ноября 2011

Как лучше всего использовать Inheritance, кроме того, что он уменьшит избыточный код!
Давайте возьмем пример
Класс А: Базовый класс
Класс B: подкласс
и класс С.

 CLASS A
    ^
    |                And     CLASS C
    |
    |
  CLASS B

Я могу использовать методы из класса A, класса B по наследству.
в том же я могу использовать методы из класса A, в классе C,
создавая экземпляр класса A. (скажем, A является публичным)
используя наследование, только уменьшить создание нового объекта / экземпляра?
Пожалуйста, помогите мне лучше понять!

Ответы [ 4 ]

0 голосов
/ 28 ноября 2011

Разница заключается в необходимости понимать способность передавать класс B в функции, которые действуют на класс A. В этом смысле B - это тип A, в котором класс C имеет или владеет A. Разница невелика и значительнапри определенных обстоятельствах.

Это не означает, что различие часто делается явным в коде tbh.Часто люди наследуют, когда они действительно хотят владеть, а иногда они действительно владеют, когда объект на самом деле - тип чего-то другого.

0 голосов
/ 28 ноября 2011

Основным моментом наследования является полиморфизм: разрешить другим классам использовать экземпляр ClassB, зная только, что он может использоваться как ClassA.

Мой любимый пример - потоки - я мог бы легко написать метод copyStream, например, InputStream и OutputStream, используя только методы, объявленные для этих типов. Затем я мог бы скопировать FileInputStream в ByteArrayOutputStream или использовать сетевые потоки и т. Д., И все это без изменения какого-либо кода в методе copyStream.

0 голосов
/ 28 ноября 2011

Основная причина использования наследования - не удаление избыточного кода.

Наследование и все возможное волшебство - ключевой, центральный пункт в ООП. Расширение класса не только позволяет вам использовать его функциональные возможности, но также изменяет (посредством полиморфизма) и добавляет больше функциональных возможностей.

0 голосов
/ 28 ноября 2011

Большим преимуществом является полиморфизм.Если классы 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'
}
...