Основные понятия наследования и синтеза
Наследование: новый класс может быть построен на основе существующего класса. Унаследование существующих классов может повторно использовать методы и области этих классов. Исходя из этого, новые методы и домены могут быть добавлены для расширения функций класса.
Синтез: Создание исходного объекта в новом классе называется синтезом. Таким образом, вы можете повторно использовать существующий код, не изменяя его форму.
1. Унаследованный синтаксис
Ключевое слово Extends указывает, что новый класс получен из существующего класса. Существующий класс называется родительским классом или базовым классом, а новый класс называется подклассом или производным классом. Например:
Студент класса расширяет человека {}Классный ученик наследует человека. Класс человека называется родительским классом или базовым классом, а класс учеников называется подклассом или производным классом.
2. Синтез синтеза
Синтез относительно прост, который должен создать существующий класс в классе.
ученик класса {Dog Dog;}Вверх стиль
1. Основные понятия
Роль наследования заключается в повторном использовании кода. Поскольку наследование означает, что все методы родительского класса также могут использоваться в подклассах, сообщения, отправленные в родительский класс, также могут быть отправлены в производный класс. Если в классе человека есть метод eat, то в классе ученика будет этот метод, что означает, что объект студента также является типом человека.
Класс Человек {public void eat () {system.out.println ("eat");} static void show (person p) {p.eat ();}} студент открытого класса расширяет человека {public void main (string [] args) {Студент S = новый студент (); Person.show (s); //}}}}}}}}}}}}【Результаты работы】:
есть
Метод шоу, определенный лично, используется для получения ручек для личности, но при ① он получает ссылку на объект студента. Это потому, что объект студента также является объектом человека. В методе показа, ручка (ссылка на объект) может быть объектом человека и человеком, полученным на классе. Такое поведение преобразования ручек для студентов в ручки для личности становится восходящим шаблоном.
2. Зачем вам отследить форму?
Почему вы хотите намеренно игнорировать тип объекта, который вызывает его при вызове Eat? Если вы сделаете метод шоу, просто получите управление студентом, он кажется более интуитивно понятным и простым для понимания, но это сделает каждый новый класс, полученный в результате реализации своего собственного метода шоу: свой собственный метод шоу:
Значение класса {private int count = 1; частное значение (int count) {this.count = count;} public static конечное значение v1 = новое значение (1), v2 = новое значение (2), v3 = новое значение (3);} класс Person {public void eT (значение v) {system.out.println ("person.eat ()"); {System.out.println ("weapber.eat ()");}} класс Студент расширяет человека {public void eat (value v) {system.out.println ("student.eat ()");}} public class paccastingdemo {public static void show (студент s) {s.eat.v1); {t.eat (value.v1);} public static void show (person p) {p.eat (value.v1);} public static void main (string [] args) {student s = new Student (); учитель t = new Pemine (); человек p = new Person (); Show (s); Show (t); Show (p);}}Очевидный недостаток в этом подходе заключается в том, что необходимо определить методы, тесно связанные с производным классом каждого человека, что приводит к большому количеству дубликатов. С другой стороны, если вы забудете перегрузку метода, вы не сообщите об ошибке. Три метода показа в приведенном выше примере могут быть объединены в один:
public static void show (person p) {p.eat (value.v1);} Динамическое связывание
При выполнении Show (ы) результатом вывода является Student.eat (). Это действительно желаемый результат, но он, похоже, не выполняется в форме, на которую мы надеялись. Давайте снова посмотрим на метод шоу:
public static void show (person p) {p.eat (value.v1);}Он получает лицо человека. При выполнении шоу (ы), как он знает, что человек обрабатывает объект ученика вместо объекта учителя? Компилятор не может знать об этом, что включает в себя проблему связывания, которая должна быть объяснена дальше.
1. Привязка вызова метода
Соединение метода и такого же тела метода вместе называется связыванием. Если перед запуском выполняется привязка, оно называется «раннее связывание». В приведенном выше примере, когда есть только один человек, компилятор не знает, какой метод вызовать. Java реализует метод вызова механизма, который может определить тип объекта во время работы, а затем вызовать соответствующий метод. Это привязка на основе типа объекта называется динамической связывания во время работы. Если метод не объявлен окончательным, все методы в Java динамически связаны.
Используйте картинку, чтобы представить отношение наследования вверх формы:
В коде это обобщено как:
Shapes=newShape();
В соответствии с отношениями наследования, законно назначить созданную ручку объекта круга форме, потому что круг принадлежит форме.
Когда называется один из основных методов класса:
Shapes=newShape();
В это время называется circle.draw (), что связано с динамическим связыванием.
Класс Человек {void eat () {} void speak () {}} Class Boy Extens exters {void eat () {System.out.println ("boy.eat ()");} void speak () {System.out.println ("boy.speak ()");} класс Girl Exters eD eat () {System.println ("girl.eat ()");}} public Class Persons {public static randperson () {switch (int) (math.random () * 2)) {default: case 0: return new Boy (); case 1: return new Girl ();}} public void main (string] args) {person [); i <p.length;Для всех классов, полученных от человека, человек устанавливает общий интерфейс, и все полученные классы имеют два поведения: есть и говорить. Полученный класс переопределяет эти определения и переопределяет оба поведения. В основном классе Randperson случайно выбирает рукоятку объекта человека. ** Стиль апелляции встречается в заявлении о возврате. Запись о возврате забирает ручку для мальчика или девочки и возвращает ее как тип человека. В настоящее время я не знаю, что это за тип, я знаю, что это только рукоятка объекта человека. В основном методе вызовите метод Randperson, чтобы заполнить объект человека в массиве, но не знают конкретной ситуации. Когда вызывается метод Eat каждого элемента массива, функция динамического связывания заключается в выполнении переопределенного метода объекта.
Однако динамическое связывание является предпосылкой, и метод связывания должен существовать в базовом классе, в противном случае оно не будет составлено и передано.
класс Person {void eat () {System.out.println ("person.eat ()");}} Class Boy Extens exters {void eat () {System.out.println ("Boy.eat ()");} void speak () {System.out.println ("Boy.speak ()") {Person p = new Boy (); p.eat (); p.speak (); // Метод Speak () не определен для типа человека}}}}}}Если в подклассе не определяется метод переопределения, метод в родительском классе называется:
Класс Человек {void eat () {System.out.println ("person.eat ()");}} Class Boy Extends Person {} public Class Persons {public static void main (string [] args) {person p = new Boy (); p.eat ();}}【Результаты работы】:
Человек.eat ()
2. Связывание статических методов
Добавьте статическое ключевое слово в приведенные выше методы и превратите их в статические методы:
Класс Человек {static void eat () {System.out.println ("person.eat ()");} static void speak () {system.out.println ("person.speak ()");}} класс Boy Extens extends {static void eat () {system.out.println ("boy.eat ()") {System.out.println ("boy.speak ()");}} Class Girl Extens exters {static void eat () {System.out.println ("Girl.eat ()");} static void speak () {System.out.println ("Girl.speak ()");} public persons {public rand rand ((int) (math.random () * 2)) {по умолчанию: случай 0: вернуть New Boy (); случай 1: вернуть new Girl ();}} public static void main (string [] args) {person [] p = новый человек [4]; для (int i = 0; i <p.length; i ++) {p [i] = randperson (); <p.length; 【Результаты работы】:
Человек.eat ()
Человек.eat ()
Человек.eat ()
Человек.eat ()
Результаты наблюдения: для статических методов, независимо от того, на какой объект подкласса относится родительный класс, называется метод родительского класса.
Мнемоническая формула
- Статический метод: статический метод смотрит на родительский класс
-Нестатические методы: нестатические методы смотрят на подклассы
Суммировать
Выше приведено все содержание подробной интерпретации этой статьи концепции наследования Java, и я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!