Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемФедор Шушмин
1 Кафедра ОСУ, Java 2004 Слайд 1 Наследование Наследование позволяет использовать существующий класс для определения новых классов, т.е. способствует многократному использованию программного обеспечения. Полиморфизм это такой способ применения наследования, при котором различные виды объектов используют различные определения (различные действия) одного и того же имени метода. Каков отец, такой и сын
2 Кафедра ОСУ, Java 2004 Слайд 2 Наследование Наследование позволяет определить очень общий класс, а затем (позже) определять более специализированные классы простым добавлением новых деталей в созданное более общее определение класса. При этом экономится труд программиста, поскольку более специализированный класс наследует все свойства общего класса, и программисту, остается запрограммировать только новые свойства класса
3 Кафедра ОСУ, Java 2004 Слайд 3 Наследование EXAMPLE. Определение базового (супер) класса public class Person { private String name; public Person() { name = "Пока без имени."; } public Person(String initialName) { name = initialName; }
4 Кафедра ОСУ, Java 2004 Слайд 4 Наследование public void setName(String newName){ name = newName; } public String getName( ){ return name; } public void writeOutput( ) { System.out.println("Имя: " + name); }
5 Кафедра ОСУ, Java 2004 Слайд 5 Наследование public boolean sameName(Person otherPerson){ return (this.name.equalsIgnoreCase(otherPerson. name)); } } //p1.name.equalsIgnoreCase(p2.name)
6 Кафедра ОСУ, Java 2004 Слайд 6 Производные классы Производный класс (derived class) это класс, определяемый путем добавления переменных реализации и методов в некоторый уже существующий класс. Существующий класс, на базе которого строится производный, называется базовым классом (base class). Производный класс имеет все переменные реализации и методы базового класса плюс все дополнительные переменные реализации и методы, которые программист считает нужным добавить
7 Кафедра ОСУ, Java 2004 Слайд 7 Производные классы Синтаксис public class Имя_Производного_Класса extends Имя_Базового_Класса { Объявления_Добавляемых_Переменных_ Реализации Объявления_Добавляемых_И_Переопред еляемых_Методов }
8 Кафедра ОСУ, Java 2004 Слайд 8 Производные классы // Определение производного класса public class Student extends Person { private int studentNumber; public Student ( ){ super () ; studentNumber = 0; // 0 - означает отсутствие номера. }
9 Кафедра ОСУ, Java 2004 Слайд 9 Производные классы public Student(String initialName, int initialStudentNumber) { super(initialName); studentNumber = initialStudentNumber; } public void reset (String newName, int newStudentNumber);{ setName (newName) ; studentNumber = newStudentNumber; }
10 Кафедра ОСУ, Java 2004 Слайд 10 Производные классы public int getstudentNumber() { return studentNumber; } public void setstudentNumber(int newStudentNumber) { studentNumber = newStudentNumber; }
11 Кафедра ОСУ, Java 2004 Слайд 11 Производные классы public void writeOutput() {// переопределение метода баз.класса System, out. println( "Имя: " + getName( ); System.out.println("Номер студента : " + studentNumber); } public boolean equals(Student otherStudent) { return (this. sameName (otherStudent) && (this. studentNumber == otherStudent. studentNumber) ) } }
12 Кафедра ОСУ, Java 2004 Слайд 12 Производные классы …. Student s1 = new Student (); Student s2 = new Student(Ringo Starr, 5); s1.setName (Garry Potter); s1.setStudentNumber (20001); if s1.equals (s2) System.out.println ( Один и тот же);…
13 Кафедра ОСУ, Java 2004 Слайд 13 Производные классы Переопределение методов Если в производный класс включить определение метода с таким же именем и с таким же количеством параметров таких же типов, как в определении метода в базовом классе, то для производного класса это новое определение метода заменяет старое. (writeOutput)
14 Кафедра ОСУ, Java 2004 Слайд 14 Производные классы В таких случаях тип значения, возвращаемого переопределяемым методом, должен совпадать с типом значения, возвращаемого методом в базовом классе. Т.е., при переопределении метода нельзя менять тип значения, возвращаемого этим методом.
15 Кафедра ОСУ, Java 2004 Слайд 15 Производные классы Если метод в производном классе имеет другое количество параметров или параметры другого типа по сравнению с методом в базовом классе, то производный класс будет иметь оба метода – перегрузка имени метода Класс Student: | public String getName (String title){ return (title + getName()); } // 2 метода getName
16 Кафедра ОСУ, Java 2004 Слайд 16 Производные классы Если данное определение метода не должно заменяться новым определением в производном классе, достаточно добавить в заголовок метода модификатор final Если метод объявляется с использованием модификатора final, компилятор тем самым получает больше информации о характере его использования, что позволяет ему сгенерировать для данного метода более эффективный код. С помощью модификатора final можно объявить целый класс, и тогда его нельзя использовать в качестве базового класса для создания из него других (производных) классов.
17 Кафедра ОСУ, Java 2004 Слайд 17 Производные классы К переменной реализации (или методу), которая закрыта в базовом классе, нельзя получить доступ по имени в определении метода любого другого класса, даже в определении метода производного класса. public void reset(String newName, int newStudentNumber) { name = newName;//НЕДОПУСТИМО //setName (newName) ;….
18 Кафедра ОСУ, Java 2004 Слайд 18 Производные классы Когда мы применяем фразу super это означает обращение к конструктору базового класса: super (initialName); // запрещено использовать // Person (initialName) Если обращение к конструктору базового класса отсутствует, Java вставит обращение к конструктору базового класса, действующему по умолчанию,т.е. Java автоматически вставит вызов super ()
19 Кафедра ОСУ, Java 2004 Слайд 19 Производные классы Определяя конструктор производного класса, в качестве имени конструктора класса можно использовать зарезервированное слово super. Обращение к super должно быть первым действием, предпринимаемым конструктором.
20 Кафедра ОСУ, Java 2004 Слайд 20 Производные классы public Student(String initialName, int initialStudentNumber) { super(initialName); studentNumber = initialStudentNumber; } использование this обеспечивает вызов конструктора того же класса, а не конструктора базового класса.
21 Кафедра ОСУ, Java 2004 Слайд 21 Производные классы добавить в класс student public Student(String initialName) { this(initialName, 0); } //вызов конструктора // public Student(String initialName, int initialStudentNumber)
22 Кафедра ОСУ, Java 2004 Слайд 22 Производные классы Слово super можно также использовать для вызова метода базового класса, который переопределяется в производном классе //альтернативное определение метода //writeOutput для класса Student public void writeOutput () { super.writeOutput() ; System.out.println("Номер студента: " + studentNumber);}
23 Кафедра ОСУ, Java 2004 Слайд 23 Многоуровневые производные классы Из любого производного класса можно создать производные классы. public class Undergraduate extends Student { private int level;// 1 для студента // первого курса, //2 для студента-второкурсника и т.д. public Undergraduate() { super(); level = 1; }
24 Кафедра ОСУ, Java 2004 Слайд 24 Многоуровневые производные классы public Undergraduate (String initialName, int initialStudentNumber, int initialLevel){ super(initialName, initialStudentNumber); level = initialLevel; } public int getLevel(){ return level; } public void setLevel (int newLevel){ level = newLevel; }
25 Кафедра ОСУ, Java 2004 Слайд 25 Многоуровневые производные классы public void reset(String newName, int newStudentNumber, int newLevel){ reset(newName, newStudentNumber); level = newLevel; } public void writeOutput() { super.writeOutput() ; System.out.println("Уровень студента: " + level) }….
26 Кафедра ОСУ, Java 2004 Слайд 26 Многоуровневые производные классы При вызове конструктора класса Undergraduate (с помощью оператора new) сначала вызывается конструктор класса Person, затем конструктор класса Student, а затем выполняются все операторы, следующие за вызовом super в конструкторе класса Undergraduate.
27 Кафедра ОСУ, Java 2004 Слайд 27 Многоуровневые производные классы Объект производного класса имеет несколько типов Объект производного класса имеет тип этого производного класса, а также тип базового класса, и более того, тип каждого из классов- предков В Java каждый класс является потомком встроенного класса Object. Поэтому каждый объект каждого класса имеет тип Object, а также тип своего класса (а также тип любого другого класса-предка).
28 Кафедра ОСУ, Java 2004 Слайд 28 Многоуровневые производные классы Поскольку объект производного класса имеет тип всех своих классов- предков (также как свой "собственный" тип), то объект этого класса можно присвоить переменной любого типа предка, но не наоборот: Person p1, р2; p1 = new Student (); р2 = new Undergraduate (); Student s = new Person(); //НЕВЕРНО!
29 Кафедра ОСУ, Java 2004 Слайд 29 Многоуровневые производные классы Должны существовать методы, которые каждый класс наследует от класса Object. Например, каждый объект наследует методы equals и toString Метод toString должен возвратить все данные, содержащиеся в объекте, преобразованными в тип String.
30 Кафедра ОСУ, Java 2004 Слайд 30 Многоуровневые производные классы Нужно переопределить метод toString, чтобы он возвращал соответствующее string-представление для данных, содержащихся в объектах определяемого вами класса. public String toString() { return ("Имя: + getName () + \nНомер студента: " + Integer.toString(studentNumber)); }
31 Кафедра ОСУ, Java 2004 Слайд 31 Многоуровневые производные классы … Student s = new Student (Студент Вася, 2004); System.out.println (s.toString());…
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.