Java объектно-ориентированная базовая грамматика 06- - Наследование

Во-вторых, наследование

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

преимущества наследования

  • Улучшение повторного использования кода .

  • Улучшение масштабируемости кода .

  • Произведены отношения между классами, учится предпосылка полиморфный .

Inherited формат extends()

[ Править ] родительский класс {
  ...
}

[ Править ] Класс подкласс расширяет родительский {
  ...
}

Наследственные особенности: а переменные-члены

1, переменная член родительского класса приватизации (частное)

  • Члены родительского класса, будь то государственный (общественный) или частные (частный), будут наследуются подклассами.

  • Хотя подкласс наследует родительский класс частные (частные) членов, но подкласса не могут наследовать закрытым членам прямой доступ и могут быть доступны через Get / Set методов, унаследованных. Как показано на рисунке:

2, переменные-члены класса родитель-потомок одного и того же имени

Мы говорим весь член родительского класса переменные наследуются подклассы, так что если член класса ребенка переменной родителя появляется с тем же именем, что будут?

Вывод:

(1) Когда переменная приватизации член класса родителя, в подклассе не прямой доступ, это никак не влияет ли то же самое имя, если вы хотите получить доступ к закрытым переменным-членам родительского класса, родительский класс может получить только / комплект метод доступа;

(2) Когда переменная член родительского класса непатентованным, прямой доступ к подклассу, поэтому, если есть повторяющиеся имена, вам нужно добавить «супер». Distinction.

Формат :. Супер имя переменной-члена родительского класса

Примечание: Хотя мы можем различать между отцом и сыном то же имя переменной-члена класса, но реальное развитие, мы не рекомендуем этого делать.

Наследственные особенности II: Методы членов

Мы говорим, что все подклассы родительского класса наследуют, но когда метод наследуются подклассами, подклассы, которые реализуют оригинальный родительский класс не подходит для подкатегорий, как это сделать?

1, метод переопределяет

1. @ Override: написано в указанном выше способе обнаружения действительного права не могут быть перезаписаны. Этот комментарий даже не писать, пока отвечают требованиям, но и правильный подход перезаписаны. Бронирование рекомендуется

2. должен гарантировать , что класс между отцом и сыном одноименного метода, список параметров является то же самое .

Способ 3. подкласс типа возвращаемого должен быть меньше или равен [Родитель] типа возвращаемого метода (на самом деле меньше , чем его подклассы, например: студент <лицо).

Примечание : Если тип возвращаемого значения основных типов данных и пустота, она должна быть такой же ,

4. разрешения подкласса метод должен быть больше или равен] [родительский процесс модификатора разрешения . Малое расширение Примечание: открытый> защищенного> по умолчанию> частные

5. Несколько специальный метод не может быть переписан

  • Статические методы не могут быть переопределены

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

  • Окончательные методы не могут быть переопределены

Советы: При переопределении, используйте метод член супер родительский класс , представляющий метод члена вызывает родительский класс.

Наследственные три характеристики: конструктор

При создании отношения между классами, во всех типах методов строительства, но и то, что влияет на это?

Во-первых, мы должны определить формат и напомнил о роли двух вещей, что конструктор.

  1. Имя методы конструкторы согласуется с именем класса.

    Так подклассы не могут наследовать конструктор родительского класса является.

  2. Роль конструктора для инициализации переменных экземпляра подкласса наследуют все переменные члены из родительского класса

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

Если конструктор класса родителя без аргументов не то, как это сделать?

Решение: В суб-конструктор класса с супер (список аргументов), показал, называть параметры конструктора родительского класса для решимостью.

Вывод:

Подкласс процесс создания экземпляра объекта должен быть завершена инициализацией унаследованной от экземпляра переменных - членов родительского класса, этот процесс через экземпляр родительского класса метод инициализации вызовы для завершения.

  • супер (): указывает на отсутствие метода инициализации аргументов экземпляра не вызвать родительский класс, требует родительский класс должен иметь параметры конфигурации, и могут быть опущены;

  • супер (список аргументов): Указывает метод инициализации параметров экземпляра с именем отца, когда отец не конструктор без аргументов, конструктор подкласса первой строки должно быть написано супер (список аргументов) явного вызова, который родитель параметры конфигурации (на самом деле, является примером, соответствующим начальным конструктора вызова метода)

  • Первая линия супер () и супер (список аргументов) может появиться только в конструкторе подкласса

Унаследованные функции четыре: одно ограничение наследования

1, Java поддерживает только одиночное наследование, не поддерживает множественное наследование.

2, Java поддерживает множественное наследование (система наследования).

Верхнего уровня родительского класса является класс Object. Все классы наследуют по умолчанию объекта, в качестве родительского класса.

3, суб-классы и суперклассы понятие относительное.

4, родитель может иметь подклассы одновременно

окончательное ключевое слово

Окончательный: окончательным и не может быть изменен, он используется, являются:

1, модифицированный класс

Это указывает на то, что класс не может быть унаследован, не подклассы

2, способы модификации

Это указывает на то, что этот метод не может быть переопределен подклассами

3, Constant заявление

последняя модификация некоторых переменных (переменных-членов или локальных переменных), представляет его значение не может быть изменено, что константы, имена констант рекомендуется использовать заглавные буквы.

Если переменный элемент с окончательной модификацией, метод не установлен, и должны быть инициализирован (или явно назначен или назначен в блоке инициализации, переменный экземпляр может быть назначены в конструкторе)

это ключевое слово

это представляет текущий объект ссылки (значение адреса), которые владеют объектные ссылки.

  • это может быть использовано в конструкторе : что экземпляр объекта создается, то есть, кто является новым, это просто кто представляет

  • Примеры такого подхода : что объект для вызова метода, то есть, кто звонит, который представляет это на.

Используйте этот формат

1, это. Имя переменной член

Когда локальная переменная с тем же именем как переменные текущего объекта, могут быть добавлены перед этой переменной-члена. Если нет повторяющихся имен, это может быть опущено.

2, это. Метод член

Когда вы называете себя членом текущих методов объекта, вы можете добавить «это.», Он может быть опущен, фактическое развитие опущены

. 3, это () или этот (список аргументов)

Когда присутствует необходимость вызвать конструктор другого, может быть использован в этой форме.

Требования:

В конструкторе должен быть в первой строке

Если класс объявляет конструктор п, существует не более п - 1 конструктор используется в «этом списке аргументов ([])», в противном случае бесконечный цикл будет происходить рекурсивный вызов

супер ключевое слово

супер от имени ссылки родительского класса

Примечание: если обратиться к членам родительского класса супер в подклассе, он должен обеспечить, чтобы члены суб-категории по - прежнему виден, то есть, обратить внимание на вопросы прав модификаторами

(1) переменные Супер. Член

Доступ к переменным-членам родительского класса в подклассе, особенно когда переменные-члены с тем же именем, как подкласс переменной-члена класса родителя.

(2) Методы Супер. Член

При вызове метода член родительского класса в подклассе, особенно, когда дочерний класс переопределяет члены родительского класса

(. 3) супер () или супер (список аргументов)

В конструкторе подкласса первой линии , для указания , которые вызвать конструктор родительского класса (инициализация метода является примером этой конструкции в основном соответствует)

супер (), и это () должна быть первой строкой в ​​конструкторе, он не может происходить одновременно.

принцип близости: для решения сложных проблем

  • И это не супер

    • В конструктора, блоки кода, метод используется, если есть переменная, сначала проверить, является ли это локальная переменная объявлена ​​в текущем блоке,

    • Если это не локальные переменные, начиная с текущего класса переменные-члены идут

    • Если текущий класс не найден, он будет искать родительский класс (не частный, кросс-пакет не может быть по умолчанию)

  • это : представитель текущих ссылок на объекты .

    • При просмотре этих переменных-членов и методов-членов, начиная с текущего класса находке, ни один родитель не найдет из (не частный, а не кросс-пакет по умолчанию).

    • Но это () или этот (список аргументов) найдет в этой категории

  • Супер : от имени родительского класса пространства хранения идентификатора (это может быть понято как указание на его отец).

    • При поиске через переменные-члены супер и методов-членов, непосредственно из родительского класса пространства (включает в себя родительский класс наследует родительский класс), чтобы найти

    • супер () или супер (список аргументов) только найти от прямого родителя

    • Можно получить доступ только родительский класс виден в подклассы по супер (не частные, кросс-пакет не может быть по умолчанию)

Примечание: супер , и это не может произойти в статическом и статическом блоке кода, и это потому , что наличие супер объектов в

Наследование и инициализация

инициализация класса

В самом деле, когда они основаны процесс инициализации вызова <clinit> () метод, и этот метод автоматически генерируется компилятором. Компилятор следующим образом эти две части будут все коды, последовательно включены в класс инициализатора <в clinit> () метод тела.

(1) статический член класса переменное явное присваивание

(2) статический оператор кода в блоке

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

Вывод:

Каждый класс имеет метод инициализации класса <в clinit> () метод, а затем инициализацию подкласса, обнаружил , что , если родительский класс не инициализирован и загружен, будет сначала загрузить и инициализировать родительский класс, затем загрузку и инициализацию подклассов. Класс, только инициализируется один раз.

Примеры инициализации

На самом деле наш код во время компиляции, автоматической обработки кода, сколотить <clinit> метод инициализации класса (), но и рассортировать один или более <инициализации> (...) метод инициализации экземпляра. Есть несколько случаев метода инициализации класса, класс имеет несколько конструкторов определены.

Примеры способов инициализации способа их, состоит из четырех частей:

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

(2) не-статические переменные экземпляра присваивания дисплея

(3) нестатический блок

(4), соответствующий конструктор кода

Специальное примечание: где (2) и (3) в сочетании с тем, (1) константой в передней части (4) должно быть в конечной поверхности

ИСПОЛНЕНИЕ:

  • Когда вы создаете объект, он будет реализован,

  • Что вызывает конструктор, это метод инициализации экземпляра, соответствующий

  • При создании объекта подкласса, экземпляр соответствующего инициализации родительского класса будет выполняться первым, реализация которых, например метода инициализации класса родительского, см использованием супер () или супер (список аргументов)

Вывод:

инициализация класса, безусловно, имеет приоритет над инициализации экземпляра.

Класс инициализируется только один раз.

Инициализирует экземпляр создается каждый раз, когда объект должен быть выполнен.

 

рекомендация

отwww.cnblogs.com/Open-ing/p/11862774.html