Термин для этого - subtyping, или замена.
Когда два типа имеют отношения наследования, один называется подтипа, а другой является супертипом. Если это применимо, то подтип может использоваться в контексте, где ожидался супертип (контекст являлся локальной переменной, полем, параметром и т. Д.).
Вот почему вы часто слышите, что inheritance обозначает is-a relationship. Сравните с composition (практика включения объекта как члена другого объекта), который обозначает отношение has-a (и это другой способ достижения code reuse при работе с классами).
Назад к наследованию, если ваши классы определены, как это, например:
class Banana : Fruit { ... }
Мы бы сказали, что Banana
(помимо того, что в Banana
, очевидно) являетсяFruit
, а также. Из-за этого отношения, вы можете сделать это, очевидно:
Banana obj = new Banana();
Но вы это делаете, а также:
Fruit obj = new Banana();
И вы можете сделать что-то подобное, когда поле или параметр метода ожидает Fruit
.
Этот тип отношений полезен, если вы хотите, чтобы части вашего кода использовали объект, но вы не хотите, чтобы они знали слишком много деталей об этом объекте (возможно, потому, что эти данные неактуальны или могут быть изменены). Если эти части могут выполнять свою работу с менее конкретной информацией (в этом случае тот факт, что объект является каким-то образом Fruit
, а не конкретно Banana
), тогда предпочтительно, чтобы они работали с этим. Это форма decoupling, и это обычно желаемое свойство кода, поскольку проект становится все сложнее.
Термин, который вы ищете, является «наследованием». –
@GlorinOakenfoot 'inheritance': D –
@ user3646717 вы также хотите поместить '()' после конструктора, иначе он не будет компилироваться. –