1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-thinking-in-java-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
6.4 到底选择组合还是继承.md 4.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 09:15 d56454c

6.4 Выбор композиции или наследования

Независимо от того, используете ли вы композицию или наследование, это позволяет вам помещать объекты внутри нового класса. Возможно, вас интересует различие между ними и вопрос выбора.

Если вы хотите использовать характеристики существующего класса внутри вашего нового класса, но не хотите использовать его интерфейсы, обычно следует выбрать композицию. Это значит, что вы можете включить объект, чтобы использовать его для реализации новых характеристик своего класса. Однако пользователи вашего нового класса будут видеть интерфейсы, которые вы определили, а не те, которые пришли вместе с включенным объектом. Учитывая этот эффект, вы должны включить private объекты существующего класса в ваш новый класс.

Иногда мы хотим позволить пользователям класса прямой доступ к составляющим новому классу. То есть, нам нужно сделать свойства членов объектов публичными (public). Члены объекта скрывают себя, поэтому это безопасная практика. Кроме того, когда пользователи знают, что мы собираемся объединять ряд компонентов, интерфейсы становятся легче понимаемыми. Объект car (автомобиль) является хорошим примером:

//: Car.java
// Композиция с публичными объектами

class Engine {
  public void start() {}
  public void rev() {}
  public void stop() {}
}
``````java
class Колесо {
  public void накачать(int psi) {}
}

class Окно {
  public void закрыть() {}
  public void открыть() {}
}

class Дверь {
  public Окно окно = new Окно();
  public void открыть_дверь() {}
  public void закрыть_дверь() {}
}

public class Машина {
  public Двигатель двигатель = new Двигатель();
  public Колесо[] колеса = new Колесо[4];
  public Дверь левая = new Дверь(),
             правая = new Дверь(); // Двухдверный автомобиль
  Машина() {
    for(int i = 0; i < 4; i++)
      колеса[i] = new Колесо();
  }
  public static void main(String[] args) {
    Машина машина = new Машина();
    машина.левая.окно.открыть();
    машина.колеса[0].накачать(72);
  }
}

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

Если вы выбрали наследование, вам потребуется взять готовый класс и создать его специализированную версию. Обычно это означает, что вы планируете использовать универсальный класс и адаптировать его под конкретные нужды. Нужно немного вообразить себе ситуацию, чтобы понять, что вы не сможете использовать объект "vehicle" (транспортное средство) для создания автомобиля — автомобиль не "содержит" транспортное средство; вместо этого он "является" типом транспортного средства. Отношение "являться" выражается через наследование, а отношение "содержать" — через композицию.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-thinking-in-java-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-thinking-in-java-zh.git
oschina-mirror
wizardforcel-thinking-in-java-zh
wizardforcel-thinking-in-java-zh
master