Java объектно-ориентированный: здесь мы организуем базовые знания объектно-ориентированных, чтобы помочь всем учиться и понять. Я надеюсь, что это может помочь всем. Вот соответствующие знания, составленные на основе информации о собеседовании компании:
Разница между перегрузкой и переопределением. Может ли перегруженный метод изменить тип возвращаемого значения?
Перегрузка означает перегрузку, а переопределение означает перезапись, то есть переписать. Перегрузка перегрузки означает, что в одном и том же классе может быть несколько методов с одним и тем же именем, но списки параметров этих методов различны (то есть число или тип параметров различны).
Перезапись переписывания означает, что метод в подклассе может быть точно таким же, как имен и параметры метода в родительском классе. Когда этот метод вызывается через объект экземпляра, созданный подклассом, будет вызван метод определения в подклассе, что эквивалентно перезаписанию точно того же метода, определенного в родительском классе. Это также проявление полиморфизма объектно-ориентированного программирования.
Переопределение может быть переведено как переопределение. Как вы можете буквально знать, он переопределяет метод и переписывает его для достижения различных функций. Наиболее знакомым переопределением для нас является реализация методов интерфейса. В интерфейсе этот метод обычно объявляется, и когда мы его реализуем, нам необходимо реализовать все методы объявления интерфейса. В дополнение к этому типичному использованию, мы также можем переопределить методы в родительском классе в наследстве. На следующие моменты следует обратить внимание во время покрытия:
1. Логотип метода наложения должен быть точно сопоставлен с логотипом метода наложения, чтобы достичь эффекта наложения;
2. Возвратное значение перезаписанного метода должно соответствовать возврату перезаписного метода;
3. Исключение, брошенное перезаписанным методом, должно соответствовать исключению, брошенному перезаписанным методом, или это подкласс;
4. Перезаписанный метод не может быть частным, в противном случае только новый метод определяется в его подклассе, и он не перезаписывается.
Перегрузка может быть переведена как перегрузка, что означает определение некоторых методов с тем же именем, различая эти методы, определяя различные входные параметры, а затем при вызове виртуальная машина выберет подходящий метод для выполнения в соответствии с различными стилями параметров. При использовании перегрузки обратите внимание на следующие моменты:
1. При использовании перегрузки вы можете пройти только разные стили параметров. Например, различные типы параметров, различное количество параметров и различные порядки параметров (конечно, несколько типов параметров в одном и том же методе должны быть разными, например, это может быть весело (int, float), но это не может быть веселым (int, int));
2. не может быть перегружен с помощью разрешений на доступ, типов возврата и исключений, связанных с исключениями;
3. Тип исключения и количество методов не повлияют на перегрузку;
4. Для наследства, если метод имеет права доступа в родительском классе и является приавте, то он не может быть перегружен в подкласс. Если определено, он определяет только новый метод и не достигнет эффекта перегрузки.
Если список параметров нескольких перегруженных методов отличается, их типы возврата могут быть разными. Если список параметров двух методов точно такой же, перегрузка перегрузки не может быть достигнута с помощью разных возвратных значений. Мы можем использовать метод обратного доказательства, чтобы проиллюстрировать эту проблему. Например, когда мы называем метод Map.Remove (Key), хотя метод удаления имеет возвратное значение, мы обычно не определяем переменную, которая получает результат возврата. В настоящее время, предполагая, что в этом классе есть два метода с одинаковым и тем же именем и списком параметров, просто потому, что тип возврата отличается, Java не может определить, какой метод хочет вызвать программист, потому что он не может быть оценен путем возврата типа результата.
Можно ли переопределить конструктор?
Конструктор конструктор не может быть унаследован, поэтому переопределение не может быть переопределено, но перегрузка может быть перегружена.
Можно ли унаследовать интерфейс? Может ли абстрактный класс реализовать интерфейс? Может ли абстрактный класс унаследовать бетонные классы? Может ли абстрактный класс существовать? Может ли абстрактный класс иметь статический основной метод в абстрактном классе?
Интерфейсы могут наследовать интерфейсы. Абстрактные классы могут реализовать (реализации) интерфейсы. Там могут быть статические основные методы в абстрактных классах.
Единственная разница между абстрактными классами и обычными классами заключается в том, что они не могут создавать объекты экземпляров и разрешать абстрактные методы.
При написании метода клона () обычно существует строка кода. Что это такое?
Метод клона () должен клон, что означает копирование объекта; То есть уже есть объект A, где A содержит некоторые допустимые значения, но если вы хотите иметь объект B, и любые изменения в B не повлияют на значение в A, но B не является новым объектом.
Копировать: ① Копировать объект возвращает новый объект, а не ссылку. ② Разница между копированием объекта и объектом, возвращенным с новым оператором, заключается в том, что копия уже содержит информацию исходного объекта, а не начальную информацию объекта.
Клон имеет поведение по умолчанию, super.clone (); Потому что сначала члены родительского класса должны быть скопированы на место, а затем его члены копируются.
Каковы аспекты объектно-ориентированных функций
Языки программирования, ориентированные на объект, включают в себя четыре основных особенности: инкапсуляции, наследование, абстракция и полиморфизм.
1 упаковка:
Упаковка является основой для обеспечения того, чтобы программные компоненты имели отличную модульность. Целью упаковки является достижение «высокой сплоченности и низкой связи» программных компонентов, чтобы предотвратить изменения, вызванные взаимозависимостью программы. На языках программирования объекта объекты являются наиболее основной единицей инкапсуляции, а объектно-ориентированная инкапсуляция более четкая и более мощная, чем традиционная языковая инкапсуляция. Объектно-ориентированная инкапсуляция предназначена для инкапсуляции кода, который описывает свойства и поведение объекта в «модуле», то есть в классе. Свойства определяются переменными, а поведение определяется методами. Метод может непосредственно получить доступ к свойствам в том же объекте. Вообще говоря, просто не забывайте разместить переменную и метод доступа к этой переменной вместе, определить все переменные элемента в классе как частные, и только собственные методы класса могут получить доступ к этим переменным элемента, что в основном реализует инкапсуляцию объекта. Помните принцип: поместите методы и связанные с ними методы, которые работают на одном и том же классе, и поместите методы и данные, которые работают на одном классе.
2. Аннотация:
Абстракция заключается в том, чтобы выяснить сходство и общие черты некоторых вещей, а затем классифицировать их в класс, который рассматривает только сходство и общие черты этих вещей, и игнорирует аспекты, которые не связаны с текущей темой и целью, и сосредоточены на аспектах, которые связаны с текущей целью. Например, видя муравья и слона, и вы можете представить, что они похожи, это абстракция. Абстракция включает в себя два аспекта: поведенческая абстракция и абстракция состояния. Например, определите класс человека следующим образом:
класс Человек {Строка Имя; int возраст; } Люди изначально являются очень сложными вещами и имеют много аспектов, но поскольку нынешняя система должна только понимать имя и возраст человека, класс, определенный выше, содержит только атрибуты имени и возраста. Это абстракция. Использование абстракции может избежать рассмотрения некоторых деталей, которые не связаны с целью.
3. Наследство:
При определении и внедрении класса он может быть выполнен на основе существующего класса, а содержание, определяемое существующим классом, принимается в качестве собственного контента, и можно добавить несколько нового контента, или исходный метод может быть изменен, чтобы сделать его более подходящим для особых потребностей. Это наследство. Наследование - это механизм, с помощью которого подклассы автоматически обмениваются данными и методами класса родителей. Это взаимосвязь между классами, которая улучшает повторную возможность и масштабируемость программного обеспечения.
4 полиморфизмы:
Полиморфизм относится к конкретному типу, на который указан эталонной переменной, определенной в программе, и вызовы метода, выпущенные через эталонную переменную, не определяются во время программирования, но определяются во время прогона программы, то есть, на который объект экземпляра класса будет определяться только во время запуска программы. Поскольку конкретный класс определяется только при запуске программы, эталонные переменные могут быть связаны с различными реализациями класса без изменения кода исходной программы, что приводит к конкретному методу соответствующего изменения эталонного вызова. То есть конкретный код, связанный с программой, запускающегося без изменения кода программы, чтобы программа могла выбрать несколько запущенных состояний, а это полиморфизм. Полиморфизм повышает гибкость и масштабируемость программного обеспечения. Например, userDao в следующем коде - это интерфейс, который определяет объект экземпляра, на который указан эталонная переменная userdao и возвращается daofactory.getdao () при выполнении. Иногда это указывает на реализацию userjdbcdao, а иногда указывает на реализацию userberbernatedao. Таким образом, вы можете изменить конкретную реализацию класса, указанную UserDao без изменения исходного кода, что приводит к конкретному коду метода userdao.insertuser () также соответственно изменяется. То есть иногда это называется методом insertuser us userjdbcdao, и иногда он называется методом insertuser usemberbernatedao:
Userdao userdao = daoFactory.getDao (); userdao.insertuser (пользователь);
Каков механизм реализации полиморфизма в Java?
Эталонная переменная, определенная родительским классом или интерфейсом, может указывать на объект экземпляра класса подкласса или конкретной реализации, а метод, вызванный программой, динамически связан во время выполнения. Это метод, который относится к конкретному объекту экземпляра, на который указывается переменная, то есть метод объекта, который работает в памяти, а не метод, определяемый в типе эталонной переменной.
В чем разница между абстрактным классом и интерфейсом?
Класс, содержащий абстрактный модификатор, - это абстрактный класс, объект экземпляра, который не может быть создан абстрактным классом. Классы, содержащие абстрактные методы, должны быть определены как абстрактный класс, а методы в классах абстрактных классов не должны быть абстрактными. Определение абстрактных методов в классе абстрактного класса должно быть реализовано в конкретном подклассе, поэтому не может быть абстрактных конструкторов или абстрактных статических методов. Если подкласс не реализует все абстрактные методы в абстрактном родительском классе, подкласс также должен быть определен как абстрактный тип.
Можно сказать, что интерфейс является особым случаем абстрактного класса, и все методы в интерфейсе должны быть абстрактными. Определение метода в интерфейсе по умолчанию в публичный абстрактный тип и тип переменной члена в интерфейсе по умолчанию в публичный статический финал.
Грамматическая разница между ними:
1. Абстрактные классы могут иметь методы строительства, но не в интерфейсах.
2. В интерфейсе могут быть обычные переменные -члены в абстрактных классах, но в интерфейсе нет обычных переменных членов.
3. Абстрактные классы могут содержать неабстрактные обычные методы. Все методы в интерфейсе должны быть абстрактными, и не могут быть неабстрактных обычных методов.
4. Типы доступа к абстрактным методам в абстрактных классах могут быть публичными, защищенными и (тип по умолчанию, хотя в Eclipse нет ошибок, оно не должно работать), но абстрактные методы в интерфейсе могут быть только публичных типов, а по умолчанию является публичный абстрактный тип.
5. Абстрактные классы могут содержать статические методы, но интерфейсы не могут содержать статические методы.
6. как абстрактные классы, так и интерфейсы могут содержать статические переменные элемента. Тип доступа статических переменных членов в абстрактных классах может быть произвольным, но переменные, определенные в интерфейсе, могут быть только публичным статическим окончательным типом, а по умолчанию является публичный статический окончательный тип.
7. Класс может реализовать несколько интерфейсов, но может наследовать только один абстрактный класс.
Разница между ними в применении:
Интерфейсы играют роль в методах проектирования системной архитектуры, в основном используемых для определения коммуникационных контрактов между модулями. Абстрактные классы играют роль в реализации кода и могут реализовать повторное использование кода. Например, шаблон проектирования метода шаблона является типичным применением абстрактных классов. Предполагая, что все классы сервлетов в определенном проекте должны использовать один и тот же метод для вынесения суждений разрешения, журналов доступа к записям и обрабатывать исключения, тогда вы можете определить абстрактный базовый класс, чтобы все сервлеты могли наследовать этот абстрактный базовый класс, полные суждения разрешения, журналы доступа и обрабатывать исключения в методе обслуживания абстрактного базового класса и только завершить их соответствующие логические коды в каждом подклассе. Псевдокод выглядит следующим образом:
Публичный абстрактный класс BaseServlet расширяет httpservlet {public final void service (httpservlectrequest, httpservletresponse response) throws ioexcation, servletexception {recore arge log для суждения разрешения, если (с разрешения) {try {doservice (запрос, ответный ответ); Doservice (httpservletRequest, httpservletresponse response) бросает ioExcation, ServletException; // Обратите внимание, что разрешение на доступ к защиту определяется как защищенное, что кажется профессиональным и строгим, поскольку это} открытый класс MyServlet1 Extens BaseServlet {Защищенная void doservice (httpservletrequest, httpservletresponse) Бросая ioExction, ServletExceptОпределенный кусок кода в середине метода родительского класса неясен, поэтому я оставляю его подклассу, поэтому я использую метод шаблона для разработки шаблона.
Может ли абстрактный метод быть статичным одновременно, может ли он быть нативным одновременно, и может ли он быть синхронизирован одновременно?
Метод реферата не может быть статичным, потому что абстрактные методы должны быть реализованы подклассами, а статический не имеет ничего общего с подклассами!
Настоящий метод означает, что метод должен быть реализован на другом языке программирования, зависящего от платформы, и нет проблем реализации подкласса, поэтому он не может быть абстрактным и не может быть смешан с абстрактным. Например, класс FileOutputSteam должен быть рассмотрен с аппаратным обеспечением, а базовая реализация использует реализации API, связанных с операционной системой. Например, он реализован на языке C в Windows. Поэтому, глядя на исходный код JDK, вы можете обнаружить, что определение открытого метода FileOutputStream заключается в следующем: Private Party void Open (String name) бросает FilenotFoundException;
Если мы хотим использовать Java, чтобы назвать функцию языка C, написанную другими, мы не можем назвать это напрямую. Нам нужно написать языковую функцию C в соответствии с требованиями Java, и наша языковая функция C будет называть языковые функции других людей. Поскольку наша языковая функция написана в соответствии с требованиями Java, наша языковая функция C может быть связана с Java. Метод стыковки на Java заключается в определении метода, соответствующего нашей функции C. Соответствующие методы в Java не нужно писать конкретный код, но нативные необходимо объявить ранее.
Для синхронизации объект блокировки синхронизации, используемый синхронизированной синхронизацией на методе, является этим, и метод абстрактного не может определить, что это такое.
Что такое внутренний класс? Статический вложенный класс отличается от внутреннего класса.
Внутренний класс - это класс, определенный внутри класса. Статические члены не могут быть определены во внутреннем классе. Статические члены не являются характеристиками объекта. Им просто нужно найти место для жизни, поэтому их нужно поместить в класс. Внутренний класс может непосредственно получить доступ к переменным членам во внешнем классе. Внутренний класс можно определить вне методов внешнего класса или в теле метода внешнего класса, как показано ниже:
открытый класс внешний {int out_x = 0; public void method () {inner1 inner1 = new inner1 (); открытый класс Inner2 // Внутренний класс, определенный внутри тела метода {public method () {out_x = 3; }} Inner2 inner2 = new inner2 (); } открытый класс Inner1 // Внутренний класс, определенный вне тела метода {}} Типы доступа внутреннего класса, определенные вне органа метода, могут быть публичными, защищенными и частными. Это похоже на то, что переменные элемента, определенные в классе, имеют 4 типа доступа, которые определяют, видно ли определение внутреннего класса для других классов. В этом случае мы также можем создать объект экземпляра внутреннего класса снаружи. При создании объекта экземпляра внутреннего класса мы должны сначала создать объект экземпляра внешнего класса, а затем использовать объект экземпляра внешнего класса для создания объекта экземпляра внутреннего класса. Код заключается в следующем:
Внешний внешний = новый внешний ();
Overt.Inner1 inner1 = Overt.new innner1 ();
Не может быть модификаторов типа доступа до того, как внутренний класс определен внутри метода, точно так же, как локальные переменные, определенные в методе, но конечные или абстрактные модификаторы могут использоваться перед внутренним классом. Этот внутренний класс не виден другим классам и не может ссылаться на этот внутренний класс, но объекты экземпляра, созданные этим внутренним классом, могут быть переданы другим классам для доступа. Этот вид внутреннего класса должен быть определен сначала, а затем используется, то есть код определения внутреннего класса должен появляться перед использованием класса, который совпадает с принципом, что локальные переменные в методе должны быть определены сначала, а затем используются. Этот внутренний класс может получить доступ к локальным переменным в корпусе метода, но конечный модификатор должен быть добавлен перед локальной переменной.
В теле метода следующий синтаксис можно использовать для создания анонимного внутреннего класса, то есть при определении определенного интерфейса или подкласса класса, объект экземпляра подкласса также создается без определения имени для подкласса:
public class Outter {public void start () {new Thread (new Runable () {public void run () {};}). start (); }} Наконец, вы можете префикс внутреннего класса, определенного вне метода, чтобы добавить статическое ключевое слово в статический вложенный класс. У этого больше нет характеристик внутреннего класса. Все, в узком смысле, это не внутренний класс. Статический вложенный класс ничем не отличается в поведении и функции обычных классов во время выполнения, но в синтаксисе есть некоторые различия в синтаксисе при программировании. Его можно определить как публичные, защищенные, дефолтные, частные и другие типы, в то время как обычные классы могут быть определены только как публичные и типы по умолчанию. Название статического класса класса вложенного класса - «Имя внешнего класса. Имя класса». Вы можете создать статический вложенный класс непосредственно, не создавая объект экземпляра внешнего класса снаружи. Например, если внутренний является статическим вложенным классом, определенным во внешнем классе, вы можете использовать следующее оператор для создания внутреннего класса:
Uper.inner inner = new over.inner ();
Поскольку статический вложенный класс не зависит от объектов внешних классов, статический вложенный класс может получить доступ к нестатическим переменным элементам внешних классов. При доступе к статическому вложенному классу во внешнем классе вы можете напрямую использовать имя статического вложенного класса, не добавляя имя внешнего класса. В статическом вложенном классе вы также можете напрямую ссылаться на статические переменные элемента внешнего класса, не добавляя имя внешнего класса.
Внутренний класс, определенный статическим методом, также является статическим вложенным классом. В настоящее время вы не можете добавить статическое ключевое слово перед классом. Статический вложенный класс в статическом методе очень похож на метод применения внутреннего класса в обычных методах. В дополнение к непосредственному доступу к переменным статического элемента во внешнем классе, он также может получить доступ к локальным переменным в статическом методе. Однако окончательный модификатор должен быть добавлен перед локальной переменной.
Может ли внутренний класс ссылаться на своих членов содержащегося класса? Есть ли какие -то ограничения?
Это совершенно нормально. Если это не статический внутренний класс, нет предела!
Если вы рассматриваете статические вложенные классы как особое случай внутренних классов, в этом случае вы не можете получить доступ к обычным переменным членам внешнего класса, но только статические члены во внешнем классе. Например, следующий код:
класс внешний {статический int x; статический класс Inner {void test () {syso (x); }}}}Анонимный внутренний класс (анонимный внутренний класс) может расширять (наследовать) другие классы и может реализовать интерфейс (реализация) (интерфейс)?
Вы можете унаследовать другие классы или реализовать другие интерфейсы. Не только может, но и должен!
Например:
Import java.util.date; тест открытого класса расширяет дату {public static void main (string [] args) {new Test (). test (); } public void test () {System.out.println (super.getClass (). getName ()); }} Результатом является тест
В методе испытания метод getClass (). GetName () называется непосредственно, и имя тестового класса возвращается. Поскольку getClass () определяется как окончательный в классе объекта, подкласс не может перезаписать метод. Следовательно, вызов getClass (). GetName () в методе тестирования фактически вызывает метод getClass (), унаследованный от родительского класса, который эквивалентен вызову метода Super.getClass (). GetName (). Следовательно, метод Super.getClass (). GetName () также должен вернуть тест. Если вы хотите получить имя родительского класса, вам следует использовать следующий код:
getClass (). GetSuperClass (). getName ();
В чем разница между объектно-ориентированным и ориентированным на процесс
1 отправная точка отличается. Объектно-ориентированный подход состоит в том, чтобы решать проблему объективного мира таким образом, чтобы соответствовать обычному мышлению. Он подчеркивает, что ключевые моменты проблемы домена напрямую ссылаются на границу между объектами. Процесс-ориентированный подход подчеркивает абстракцию и модульность процесса, который представляет собой процесс, ориентированную на процесс конструкции или справляется с объективными мировыми проблемами.
2. Способный объект метод использует компьютерную логику для моделирования физического существования в объективном мире, и использует класс сбора объектов в качестве основного устройства для решения проблем, чтобы сделать компьютерный мир ближе к объективному миру, чтобы сделать проблему более прямой и ясной. Ориентированный на объект метод использует иерархию классов для отражения наследования и развития между классами, в то время как метод, ориентированный на объект, обрабатывает проблемы с базовым блоком, который позволяет модулю, который четко и точно выражает процесс, использует модульную иерархию, чтобы суммировать отношения и функции между модулями или модулями, и абстрагирует проблему целевого мира в процесс, которые могут быть обработаны по компьютерам.
3 Метод обработки данных отличается от метода управляющей программы. Объектно-ориентированный метод инкапсулирует данные и соответствующий код в целом. В принципе, другие объекты не могут напрямую изменять свои данные, то есть изменение объектов может быть завершена только своими собственными функциями. Метод управления программой-активировать и запустить программу с помощью «управляемого событиями». Объектно-ориентированный процесс непосредственно обрабатывает данные через программу, и результаты обработки отображаются после завершения обработки. С точки зрения контроля программы, программа называется или возвращается в программу в соответствии с дизайном, и не может быть навигацией. Существует взаимосвязь между модулями, между элементом управления и управления, а также вызовом и вызовом.
4 Методы конструкции анализа и преобразования кодирования различны. Анализ объектно-ориентированного подхода на протяжении всего жизненного цикла программного обеспечения. В дизайне и кодировании это плавный процесс. От анализа до дизайна, а затем до кодирования, он использует последовательную модель для отображения, то есть это беспроблемное соединение. Метод объектно-ориентированного процесса подчеркивает преобразование между аналитическим проектированием и кодированием в соответствии с правилами, а также достигается анализ, проектирование и кодирование на протяжении всего жизненного цикла программного обеспечения.
Каковы преимущества объектно-ориентированного развития
1 Более высокая эффективность развития. Использование объектно-ориентированного развития может абстрагировать реальные вещи и напрямую отображать реальные практики в разработанные объекты.
2 Убедитесь, что надежность программного обеспечения. Это именно потому, что способность объектно-ориентированного развития обладает высокой повторной использованием. В течение процесса разработки существующий код, который был протестирован в связанных областях, был повторно использован. Следовательно, он, естественно, играет хорошую роль в продвижении надежности программного обеспечения.
3 Обеспечить высокое обслуживание программного обеспечения. Из-за объектно-ориентированного метода разработки код очень хорошо читается. В то же время, объектно-ориентированный шаблон проектирования делает структуру кода более четкой. В то же время для модели разработки, ориентированной на объект, уже есть много очень зрелых моделей дизайна. Эти шаблоны проектирования могут позволить программам изменять некоторые модули только при столкновении с изменениями спроса, поскольку их удобнее поддерживать.
В чем разница между этим и супер
На языке Java это указывает на текущий объект экземпляра. Одна из его очень важных функций - отличить переменные элемента объекта от формальных параметров метода (когда имя метода участвует в переменной элемента, переменная элемента будет перезаписана).
Super можно использовать для доступа к методам или переменным элемента родительского класса. Когда метод или переменная члена детского класса имеет то же имя, что и родительский класс, метод или переменная члена родительского класса также будут перезаписаны. Если вы хотите получить доступ к методу или переменной члена родительского класса, вы можете получить к нему доступ только через супер -ключевое слово
Как получить название класса родительского класса
Java Language предоставляет метод получить имя класса: getClass (). GetName (). Разработчики могут назвать этот метод, чтобы получить имя класса. Однако для наследства имя класса родительского класса не может быть получено, вызывая метод getClass (). GetName () родительского класса, например:
Класс A {} Общедоступный тест класса расширяет {public void -test () {System.out.println (super.getClass (). GetName ());} public static void main (string []) args) {new test.test ();}}Результатом прогона программы является тест. Причина в том, что любой класс в языке Java наследует от класса объектов. Метод GetClass определяется как окончательный родной в классе объекта. Подклассы не могут переопределить этот метод. Следовательно, this.getClass () и super.getClass () наконец -то вызовите метод getClass () в классе объекта. Определение метода getClass () в классе объекта: вернуть класс времени выполнения этого объекта. Код имени родительского класса может быть получен в подклассе с помощью механизма отражения Java следующим образом:
Класс A {} Общедоступный тест класса расширяет {public void -test () {System.out.println (this.getClass (). GetSuperClass (). GetName ());} publci static void main (string [] args) {new Test (). Test ();}}В чем разница между комбинацией и наследством
Композиция и наследство являются двумя способами повторного использования кода в объектно-ориентированном. Комбинация относится к созданию объектов исходного класса в новом классе и повторно использовании функций существующего класса. Наследование является одной из основных особенностей объектно-ориентированных, что позволяет дизайнерам определять реализацию класса на основе реализации других классов. Как композиция, так и наследство позволяют устанавливать детские объекты в новых классах, за исключением того, что отображается композиция, в то время как наследование является подразумевающим. Существует соответствие между комбинацией и наследством: весь класс в композиции соответствует подклассу в наследстве, а локальный класс в композиции соответствует родительскому классу в наследстве. При его использовании следуйте следующим двум принципам:
1 Если между двумя классами не существует отношения «is-a», не используйте наследование легко, потому что чрезмерное использование наследования разрушит обслуживание кода. Когда родительский класс будет изменен, он повлияет на все подклассы, унаследованные от него.
2. Не используйте наследование только для достижения полиморфизма. Если взаимосвязь между классами не является «is-a», вы можете достичь одной и той же цели, внедряя интерфейсы и комбинации.
Поскольку Java Language поддерживает только одиночное наследство, если вы хотите наследовать два или более класса одновременно, его нельзя напрямую реализовано в Java. В то же время, на языке Java, если будет достигнуто слишком много наследия, содержание в классе станет раздутым. Поэтому на языке Java, если вы можете использовать комбинации, постарайтесь не использовать наследование.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!