2015-11-08 4 views
1

Мой преподаватель опубликовал образец промежуточного результата для нас, и я смущен по следующему вопросу:Подтипирование без наследования и наследования без подтипирования?

Показать пример наследования без подтипов и подтипов без наследования.

Мы используем следующие определения, и мы программирование в Java: http://www.cmi.ac.in/~madhavan/courses/pl2006/lecturenotes/lecture-notes/node28.html

Что бы быть хорошим способом, чтобы представить эти две идеи?

+1

Вы можете удалить ссылку и подвести итог ее содержимому как часть своего вопроса? Многие из нас не могут/не будут следовать ссылкам на случайные сайты, потому что мы работаем, а также понижает качество вашего вопроса, потому что, как только сайт/документ удаляется, ваш вопрос перестает иметь смысл. Как только это будет сделано, я удалю свой нисходящий голос и проголосую за закрытие. –

ответ

0

В соответствии с перечисленном определения субтипирование:

Подтипы относится к совместимости интерфейсов. Тип B является подтипом А, если каждая функция, которая может быть вызвана на объект типа А также может быть вызван на объект типа B.

Суб-типирование в Java в основном сродни расширения или реализации интерфейс на Java. Например:

interface Fish { 
    void swim(); 
} 

interface FlyingFish extends Fish { 
    void fly(); 
} 

Здесь FlyingFish является подтипом Fish, потому что летучая рыба всегда вид рыбы.

Согласно указанному определению наследования:

Наследование относится к повторному использованию реализаций. Тип B наследуется от другого типа A, если некоторые функции для B записываются в терминах функций A.

Это наследование определения относится к наследованию реализации на Java. Обычно это также форма подпечатывания, но не всегда с плохо разработанными таксономиями, которые вы увидите по мере продвижения в своей карьере. ;-) Например:

class FlyingFish { 
    void swim() { 
     // implementation code to swim in water 
    } 

    void fly() { 
     // implementation code to jump out of the water and fly 
    } 
} 

class Bird extends FlyingFish { 
    // no need to implement fly, reuse implementation of flying fish 

    void swim() { 
     // do nothing implementation - most birds can't swim. 
    } 
} 

class Fish extends FlyingFish { 
    void fly() { 
     // do nothing implementation - most birds can't swim. 
    } 

    // no need to implement swim, reuse implementation of flying fish 
} 

Здесь, как и BirdFish ненадо наследуют от FlyingFish, хотя ни Bird, ни Fish являются подтипы летучей рыбы.

Надеюсь, что это поможет, прокомментируйте, если у вас есть какие-либо последующие вопросы. Кроме того, книга, которая может стоить вашего времени, - Эффективная Java 2nd Ed. от Josh Boch. В этой книге Блох дает некоторые действительно интересные материалы по этим темам.

+0

Я проигнорировал это, потому что я не вижу определения проблемы в вопросе или вашем ответе. Если вы можете исправить это, я с радостью удалю свой downvote. Обычно на SO нам не нравятся вопросы или ответы, которые ссылаются на другие сайты, не предлагая резюме содержания для тех из нас, кто не может следить за ссылками, пока мы работаем. Ty. –

+0

Немного придирчивый к моим вкусам, я буду кусать. См. Пересмотренный ответ. – entpnerd

+0

Ty - Я действительно не мог понять ответ (или вопрос на самом деле) без встроенных определений. Я нахожусь на работе, и связанный сайт заблокирован для меня, поэтому он может быть придирчивым, но для многих из нас это жизненно важно. –

Смежные вопросы