Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛБ / java-lb2.doc
Скачиваний:
57
Добавлен:
12.11.2016
Размер:
77.31 Кб
Скачать

3.2.8 Расширение других классов

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

Расширяя суперкласс, мы делаем новую копию имеющегося класса, однако эту копию можно развивать.

Каждый класс в языке Java считается объектом. По умолчанию каждый класс порождается от класса java.lang.Object. Поэтому, если класс не расширяет какой-нибудь другой класс, он будет расширять класс java.lang.Object

Множественное наследование в языке Java отсутствует. Поэтому, в oтличие от С++, классы Java могут расширять только один класс.

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

Общий класс называется базовым или супер- или родительским классом. Полученный на его основе класс называется производным или наследуемым или sub- или наследник класс.

Пример. Пусть базовый тип - “фигура”, а каждая фигура имеет размер, цвет, положение. Каждая фигура может быть нарисована, стерта, перемещена, окрашена и т.д. От нее образуются (наследуются) специфические типы: окружность, квадрат, треугольник, каждый из которых может иметь дополнительные характеристики и черты поведения. Определенные фигуры могут быть зеркально отражены, например. Некоторые черты поведения могут отличаться, например, если нужно посчитать площадь фигуры. Класс "Фигура" иерархически объединяет и похожие и различные черты фигур.

3.2.9 Переопределение и перегрузка

Когда мы наследуем от существующего класса, мы создаем новый класс. Этот новый класс содержит не все члены существующего типа (private члены спрятаны и недоступны). Но самое важное - дублирование кода базового класса. То есть, все сообщения, которые можно послать объекту базового класса, можно послать объекту наследуемого класса. Это означает, что наследуемый класс того же типа, что и базовый класс.

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

В Java ключевое слово, означающее наследование - extends.

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

Для переопределения метода создается новое определение для метода в наследуемом классе. Мы говорим: “Мы используем ту же функцию, но мы будем делать что-то другое для нового типа".

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

3.2.10 Пример наследования

Условие. Задать классы фигур, прямоугольников, треугольников, определить их площади и периметры.

public class Shape{

public int top,left,bot,right;

public int square(){

int i;

i=(bot-top)*(right-left);

return i;

}

}

public class Poly extends Shape{

public int perim(){

int j;

j=2*((bot-top)+(right-left));

return j;

}

}

public class Triangle extends Shape{

public int x2,y2,x3,y3;

public double a1,a2,a3;

public int perim(){

int j;

a1=Math.sqrt((y2-top)*(y2-top)+(x2-left)*(x2-left));

a2=Math.sqrt((y3-top)*(y3-top)+(x3-left)*(x3-left));

a3=Math.sqrt((y3-y2)*(y3-y2)+(x3-x2)*(x3-x2));

j=(int)(a1+a2+a3);

return j;

}

public int square(){

int i;

i=(int)(a2*a3/2);

return i;

}

}

В другом файле наберем автономную программу Еgor.java, в которой воспользуемся классами Poly и Triangle. В этой программе создадим объекты прямоугольника и треугольника. Инициализацию их значений выполним при помощи конструктора.

public class Egor{

public static void main(String args[])

{

int i,s1,s2,pert;

String a;

Poly p=new Poly();

Triangle t=new Triangle();

3.4 Порядок выполнения и методические указания по выполнению работы

  1. Составьте диаграмму классов согласно варианта задания.

  2. Опишите базовый класс и классы-наследники.

  3. Напишите автономную программу, работающую с экземплярами созданных классов.

3.5. Содержание отчета

В отчет необходимо включить:

цель лабораторной работы;

описание понятий наследования, переопределения;

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

выводы.

3.6. Контрольные вопросы и задания

  1. Что представляют собой объекты и классы?

  2. Какие элементы включают в себя объявление класса? Для чего служат модификаторы?

  3. Что такое метод? Как его объявить?

  4. Какие существуют спецификаторы и модификаторы методов?

  5. Что такое поля класса? Какие модификаторы можно использовать с полями?

  6. Что такое расширение класса?

  7. Как связаны базовый и производные классы?

  8. Что такое переопределение? Как его задать?

Соседние файлы в папке ЛБ