Wat is het verschil tussen IS -A-relatie en HAS-A-relatie in Java?

Ik ben nieuw bij JAVA en ben net begonnen met het leren van IS-A en HAS-A-relaties, maar kon niet veel krijgen. Ik wil visualiseren hoe deze twee verschillen en wanneer we IS-A en HAS-A zouden moeten gebruiken?


Antwoord 1, autoriteit 100%

Een IS-A-relatie is overerving. De klassen die overerven, staan bekend als subklassen of onderliggende klassen. Aan de andere kant is de HAS-A-relatie compositie.

In OOP is de IS-A-relatie volledig overerving. Dit betekent dat de kindklasse een soort bovenliggende klasse is. Een appel is bijvoorbeeld een vrucht. Dus je zult fruit verlengen om appel te krijgen.

class Apple extends Fruit {
}

Aan de andere kant betekent compositie het maken van instanties die verwijzingen naar andere objecten hebben. Een kamer heeft bijvoorbeeld een tafel.
Je maakt dus een klaslokaal en in die klas maak je een instantie van het type tabel.

class Room {
    Table table = new Table();
}

Een HAS-A-relatie is een dynamische (runtime) binding, terwijl overerving een statische (compilatietijd) binding is.
Als je de code gewoon opnieuw wilt gebruiken en je weet dat de twee niet van dezelfde soort zijn, gebruik dan de compositie. Een oven kan je bijvoorbeeld niet van een keuken erven. Een keuken heeft een oven.
Als je voelt dat er een natuurlijke relatie is, zoals Apple, is het een overerving van Fruit.


Antwoord 2, autoriteit 36%

Foo is-a Bar:

public class Foo extends Bar{}

Foo heeft een bar

public class Foo {
    private Bar bar;
}

Other episodes