Программирование Скачать
презентацию
<<  Требования к условиям реализации ООП Языки программирования  >>
Наследование
Наследование
Наследование
Наследование
Наследование
Наследование
Наследование
Наследование
Наследование
Наследование
Производные классы
Производные классы
Синтаксис public class Имя_Производного_Класса extends
Синтаксис public class Имя_Производного_Класса extends
// Определение производного класса public class Student extends Person
// Определение производного класса public class Student extends Person
Производные классы
Производные классы
public int getstudentNumber() { return studentNumber; } public void
public int getstudentNumber() { return studentNumber; } public void
Производные классы
Производные классы
…. Student s1 = new Student (); Student s2 = new Student(“Mel Gibson”,
…. Student s1 = new Student (); Student s2 = new Student(“Mel Gibson”,
Переопределение методов Если в производный класс включить определение
Переопределение методов Если в производный класс включить определение
В таких случаях тип значения, возвращаемого переопределяемым методом,
В таких случаях тип значения, возвращаемого переопределяемым методом,
Производные классы
Производные классы
Производные классы
Производные классы
К переменной реализации (или методу), которая закрыта в базовом классе
К переменной реализации (или методу), которая закрыта в базовом классе
Производные классы
Производные классы
Определяя конструктор производного класса, в качестве имени
Определяя конструктор производного класса, в качестве имени
Public student(string initialname, int initialstudentnumber) {
Public student(string initialname, int initialstudentnumber) {
Добавить в класс student public student(string initialname) {
Добавить в класс student public student(string initialname) {
Слово super можно также использовать для вызова метода базового класса
Слово super можно также использовать для вызова метода базового класса
Из любого производного класса можно создать производные классы
Из любого производного класса можно создать производные классы
public Undergraduate (String initialName, int initialStudentNumber,
public Undergraduate (String initialName, int initialStudentNumber,
public void reset(String newName, int newStudentNumber, int newLevel){
public void reset(String newName, int newStudentNumber, int newLevel){
При вызове конструктора класса Undergraduate (с помощью оператора new)
При вызове конструктора класса Undergraduate (с помощью оператора new)
Конструкторы при наследовании
Конструкторы при наследовании
если первой строкой идет обращение к другому конструктору этого же
если первой строкой идет обращение к другому конструктору этого же
Конструкторы при наследовании
Конструкторы при наследовании
Конструкторы при наследовании
Конструкторы при наследовании
Объект производного класса имеет несколько типов Объект производного
Объект производного класса имеет несколько типов Объект производного
Поскольку объект производного класса имеет тип всех своих
Поскольку объект производного класса имеет тип всех своих
Существуют методы, которые каждый класс наследует от класса Object
Существуют методы, которые каждый класс наследует от класса Object
Обычно переопределяют метод toString, чтобы он возвращал
Обычно переопределяют метод toString, чтобы он возвращал
… Student s = new Student (“Студент Вася”, 2004); System
… Student s = new Student (“Студент Вася”, 2004); System
В классе Object этот метод реализован следующим образом: public String
В классе Object этот метод реализован следующим образом: public String
Logan Pearsall Smith: All my life, as down an abyss without a bottom
Logan Pearsall Smith: All my life, as down an abyss without a bottom
Слайды из презентации «Производные классы» к уроку информатики на тему «Программирование»

Автор: obf. Чтобы увеличить слайд, нажмите на его эскиз. Чтобы использовать презентацию на уроке, скачайте файл «Производные классы.ppt» бесплатно в zip-архиве размером 194 КБ.

Скачать презентацию

Производные классы

содержание презентации «Производные классы.ppt»
СлайдТекст
1 Наследование

Наследование

Наследование позволяет использовать существующий класс для определения новых классов, т.е. способствует многократному использованию программного обеспечения. Полиморфизм — это такой способ применения наследования, при котором различные виды объектов используют различные определения (различные действия) одного и того же имени метода.

Каков отец, такой и сын

Разработал к.т.н. Фофанов О.Б.

27.10.2011

Java, каф.ОСУ, АВТФ

1

2 Наследование

Наследование

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

27.10.2011

Java, каф.ОСУ, АВТФ

2

3 Наследование

Наследование

EXAMPLE. Определение базового (супер) класса public class Person { private String name; public Person() { name = "Пока без имени."; } public Person(String initialName) { name = initialName; }

27.10.2011

Java, каф.ОСУ, АВТФ

3

4 Наследование

Наследование

public void setName(String newName){ name = newName; } public String getName( ){ return name; } public void writeOutput( ) { System.out.println("Имя: " + name); }

27.10.2011

Java, каф.ОСУ, АВТФ

4

5 Наследование

Наследование

public boolean sameName(Person otherPerson){ return (this.name.equalsIgnoreCase(otherPerson. name)); } } //p1.name.equalsIgnoreCase(p2.name)

27.10.2011

Java, каф.ОСУ, АВТФ

5

6 Производные классы

Производные классы

Производный класс (derived class) — это класс, определяемый путем добавления переменных реализации и методов в некоторый уже существующий класс. Существующий класс, на базе которого строится производный, называется базовым классом (base class). Производный класс имеет все доступные переменные реализации и доступные методы базового класса плюс все дополнительные переменные реализации и методы, которые программист считает нужным добавить

27.10.2011

Java, каф.ОСУ, АВТФ

6

7 Синтаксис public class Имя_Производного_Класса extends

Синтаксис public class Имя_Производного_Класса extends

Имя_Базового_Класса { <Объявления_Добавляемых_Переменных_ Реализации > <Объявления_Добавляемых_И_Переопред еляемых_Методов> }.

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

7

8 // Определение производного класса public class Student extends Person

// Определение производного класса public class Student extends Person

{ private int studentNumber; public Student ( ){ super () ; studentNumber = 0; // 0 - означает отсутствие номера. }.

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

8

9 Производные классы

Производные классы

public Student(String initialName, int initialStudentNumber) { super(initialName); studentNumber = initialStudentNumber; } public void reset (String newName, int newStudentNumber);{ setName (newName) ; studentNumber = newStudentNumber; }

27.10.2011

Java, каф.ОСУ, АВТФ

9

10 public int getstudentNumber() { return studentNumber; } public void

public int getstudentNumber() { return studentNumber; } public void

setstudentNumber(int newStudentNumber) { studentNumber = newStudentNumber; }.

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

10

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) ) } }

27.10.2011

Java, каф.ОСУ, АВТФ

11

12 …. Student s1 = new Student (); Student s2 = new Student(“Mel Gibson”,

…. Student s1 = new Student (); Student s2 = new Student(“Mel Gibson”,

55551); s1.setName (“Garry Potter”); s1.setStudentNumber (20001); if s1.equals (s2) System.out.println (‘’ Один и тот же’’);…

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

12

13 Переопределение методов Если в производный класс включить определение

Переопределение методов Если в производный класс включить определение

метода с таким же именем и с таким же количеством параметров таких же типов, как в определении метода в базовом классе, то для производного класса это новое определение метода заменяет старое. (writeOutput).

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

13

14 В таких случаях тип значения, возвращаемого переопределяемым методом,

В таких случаях тип значения, возвращаемого переопределяемым методом,

должен совпадать с типом значения, возвращаемого методом в базовом классе. Т.е., при переопределении метода нельзя менять тип значения, возвращаемого этим методом.

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

14

15 Производные классы

Производные классы

Если метод в производном классе имеет другое количество параметров или параметры другого типа по сравнению с методом в базовом классе, то производный класс будет иметь оба метода – перегрузка имени метода Класс Student: | public String getName (String title){ return (title + getName()); } // 2 метода getName

27.10.2011

Java, каф.ОСУ, АВТФ

15

16 Производные классы

Производные классы

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

27.10.2011

Java, каф.ОСУ, АВТФ

16

17 К переменной реализации (или методу), которая закрыта в базовом классе

К переменной реализации (или методу), которая закрыта в базовом классе

нельзя получить доступ по имени в определении метода любого другого класса, даже в определении метода производного класса. public void reset(String newName, int newStudentNumber) { name = newName;//НЕДОПУСТИМО //setName (newName) ;….

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

17

18 Производные классы

Производные классы

Когда мы применяем фразу super это означает обращение к конструктору базового класса: super (initialName); // запрещено использовать // Person (initialName) Если обращение к конструктору базового класса отсутствует, Java вставит обращение к конструктору базового класса, действующему по умолчанию,т.е. Java автоматически вставит вызов super ()

27.10.2011

Java, каф.ОСУ, АВТФ

18

19 Определяя конструктор производного класса, в качестве имени

Определяя конструктор производного класса, в качестве имени

конструктора класса можно использовать зарезервированное слово super. Обращение к super должно быть первым действием, предпринимаемым конструктором.

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

19

20 Public student(string initialname, int initialstudentnumber) {

Public student(string initialname, int initialstudentnumber) {

super(initialname); studentnumber = initialstudentnumber; } использование this обеспечивает вызов конструктора того же класса, а не конструктора базового класса.

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

20

21 Добавить в класс student public student(string initialname) {

Добавить в класс student public student(string initialname) {

this(initialname, 0); } //вызов конструктора // public student(string initialname, int initialstudentnumber).

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

21

22 Слово super можно также использовать для вызова метода базового класса

Слово super можно также использовать для вызова метода базового класса

который переопределяется в производном классе //альтернативное определение метода //writeOutput для класса Student public void writeOutput () { super.writeOutput() ; System.out.println("Номер студента: " + studentNumber);}.

Производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

22

23 Из любого производного класса можно создать производные классы

Из любого производного класса можно создать производные классы

public class Undergraduate extends Student { private int level;// 1 для студента // первого курса, //2 для студента-второкурсника и т.д. public Undergraduate() { super(); level = 1; }.

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

23

24 public Undergraduate (String initialName, int initialStudentNumber,

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; }.

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

24

25 public void reset(String newName, int newStudentNumber, int newLevel){

public void reset(String newName, int newStudentNumber, int newLevel){

reset(newName, newStudentNumber); level = newLevel; } public void writeOutput() { super.writeOutput() ; System.out.println("Уровень студента: " + level) }….

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

25

26 При вызове конструктора класса Undergraduate (с помощью оператора new)

При вызове конструктора класса Undergraduate (с помощью оператора new)

сначала вызывается конструктор класса Person, затем конструктор класса Student, а затем выполняются все операторы, следующие за вызовом super в конструкторе класса Undergraduate.

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

26

27 Конструкторы при наследовании

Конструкторы при наследовании

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

27.10.2011

Java, каф.ОСУ, АВТФ

27

28 если первой строкой идет обращение к другому конструктору этого же

если первой строкой идет обращение к другому конструктору этого же

класса, то он вызывается. Повторное выполнение инициализаторов не производится.

Конструкторы при наследовании

27.10.2011

Java, каф.ОСУ, АВТФ

28

29 Конструкторы при наследовании

Конструкторы при наследовании

Второй пункт имеет ряд важных следствий. Во-первых, из него следует, что в инициализаторах нельзя использовать переменные класса, если их объявление записано позже Во-вторых, теперь можно сформулировать наиболее гибкий подход к инициализации final-полей. Главное требование – чтобы такие поля были проинициализированы ровно один раз. Это можно обеспечить в следующих случаях:

27.10.2011

Java, каф.ОСУ, АВТФ

29

30 Конструкторы при наследовании

Конструкторы при наследовании

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

27.10.2011

Java, каф.ОСУ, АВТФ

30

31 Объект производного класса имеет несколько типов Объект производного

Объект производного класса имеет несколько типов Объект производного

класса имеет тип этого производного класса, а также тип базового класса, и более того, тип каждого из классов-предков В Java каждый класс является потомком встроенного класса Object. Поэтому каждый объект любого класса имеет тип Object, а также тип своего класса (а также тип любого другого класса-предка).

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

31

32 Поскольку объект производного класса имеет тип всех своих

Поскольку объект производного класса имеет тип всех своих

классов-предков (также как свой "собственный" тип), то объект этого класса можно присвоить переменной любого типа предка, но не наоборот: Person p1, р2; p1 = new Student (); р2 = new Undergraduate (); Student s = new Person(); //НЕВЕРНО!

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

32

33 Существуют методы, которые каждый класс наследует от класса Object

Существуют методы, которые каждый класс наследует от класса Object

Например, каждый объект наследует методы equals() и toString() Метод toString() должен возвратить все данные, содержащиеся в объекте, преобразованными в тип String.

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

33

34 Обычно переопределяют метод toString, чтобы он возвращал

Обычно переопределяют метод toString, чтобы он возвращал

соответствующее string-представление для данных, содержащихся в объектах определяемого класса. public String toString() { return ("Имя: “ + getName () + “\nНомер студента: " + Integer.toString(studentNumber)); }.

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

34

35 … Student s = new Student (“Студент Вася”, 2004); System

… Student s = new Student (“Студент Вася”, 2004); System

out.println (s.toString());…

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

35

36 В классе Object этот метод реализован следующим образом: public String

В классе Object этот метод реализован следующим образом: public String

toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } То есть возвращает строку, содержащую название класса объекта и его хеш-код в шестнадцатеричном формате. Child@723d7c Child@22c95b.

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

36

37 Logan Pearsall Smith: All my life, as down an abyss without a bottom

Logan Pearsall Smith: All my life, as down an abyss without a bottom

I have been pouring van loads of information into that vacancy of oblivion I call my mind Логан Пирсолл Смит: Всю свою жизнь я пытался заполнить бездонную пропасть, которую называл своим разумом.

Многоуровневые производные классы

27.10.2011

Java, каф.ОСУ, АВТФ

37

«Производные классы»
http://900igr.net/prezentatsii/informatika/Proizvodnye-klassy/Proizvodnye-klassy.html
cсылка на страницу
Урок

Информатика

126 тем
Слайды
Презентация: Производные классы.ppt | Тема: Программирование | Урок: Информатика | Вид: Слайды