В чем разница между отношениями IS -A и HAS-A в Java?
Я новичок в JAVA и только начал изучать отношения IS-A и HAS-A, но не смог многого понять. Я хочу представить, как эти два понятия отличаются и когда нам следует использовать IS-A и HAS-A?
2 ответа
Отношения IS-A - это наследство. Классы, которые наследуются, называются подклассами или дочерними классами. С другой стороны, HAS - отношения это композиция
В ООП ИС - отношения полностью наследственные. Это означает, что дочерний класс является типом родительского класса. Например, яблоко - это фрукт. Таким образом, вы продлите фрукты, чтобы получить яблоко.
class Apple extends Fruit{
.
.
}
С другой стороны, композиция означает создание экземпляров, которые имеют ссылки на другие объекты. Например, в комнате есть стол. Таким образом, вы создадите классную комнату, а затем в этом классе создадите экземпляр таблицы типов.
class Room{
:
Table table = new Table ();
:
:
}
Отношение HAS-A - это динамическая (во время выполнения) привязка, а наследование - статическая (во время компиляции). Если вы просто хотите повторно использовать код и знаете, что они не одинаковые, используйте композицию. Например, вы не можете печь из кухни. Кухня имеет духовку. Когда вы чувствуете, что есть естественные отношения, как Apple, это наследство использования фруктов.
Фу-бар
public class Foo extends Bar{}
Фу имеет бар
public class Foo {
private Bar bar;
}