Junior
Какво означават отношенията "съм" и "имам" в обектно-ориентираното програмиране?
sobes.tech AI
Отговор от AI
Отношението "являвам се" (is-a) е наследяване. Подкласът "е" клас-предшественик и наследява неговите свойства и поведение.
// Клас-предшественик
class Animal {
void eat() {
System.out.println("Животното яде");
}
}
// Клас-наследник
class Dog extends Animal {
void bark() {
System.out.println("Кучето лае");
}
}
В този пример, Dog "е" Animal.
Отношението "имам" (has-a) е композиция или агрегация. Един обект "има" препратка към друг обект като част от състоянието си.
class Engine {
void start() {
System.out.println("Двигателят е стартиран");
}
}
class Car {
private Engine engine; // Колата "има" двигател
public Car() {
this.engine = new Engine();
}
void drive() {
engine.start();
System.out.println("Колата кара");
}
}
Тук, Car "има" Engine. Композицията предполага силна връзка (жизненият цикъл на вложения обект зависи от този, който го съдържа), агрегацията е по-слаба (обектите могат да съществуват независимо). В примера е показана композиция.
Ключови разлики:
- "Являвам се" (
is-a) — наследяване, определя йерархия на типове. - "Имам" (
has-a) — композиция/агрегация, определя структурата на обекта чрез включване на други обекти.