Назад
Вперед
1.18. Наследование классов
Пример демонстрирует механизм наследования,
примененный в языке программирования Java. На базе
класса MyRect, описанного в примере 1.17. Создание собственных классов,
мы создали новый класс, переопределив в нем
конструктор и метод, а также добавив новый метод.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Немного теории
Механизм наследования, реализованный в Java,
допускает создание новых классов на базе
имеющихся. При этом наследование возможно только
от одного класса, то есть нельзя создать класс
одновременно на базе двух других классов.
Конструктор порожденного класса может
вызывать конструктор базового класса при помощи
оператора super.
Методы порожденного класса могут дополнять
методы базового класса, а также заменять их
(перегружать).
Для объекта порожденного класса допускается
вызов методов базового класса.
Описание примера
В нашем примере мы воспользовались классом MyRect,
подробно описанном в разделе 1.17.
Создание собственных классов. На базе этого
класса, предназначенного для работы с
прямоугольниками, мы создали новый класс MyColorRect. Объекты класса MyColorRect
являются цветными прямоугольниками.
Программа ColorRectangle создает цветной
прямоугольник, указывая в конструкторе его
начальный цвет и координаты углов, а затем
изменяет эти параметры, вызывая соответствующие
методы. Результаты выполняемых операций
отображаются на консоли.
Класс MyColorRect
Класс MyColorRect определен следующим образом:
class MyColorRect extends MyRect
{
protected Color rectColor;
MyColorRect(int x1, int y1,
int x2, int y2, Color colr)
{
. . .
}
public void setColor(Color colr)
{
. . .
}
public String toString()
{
. . .
}
}
Тот факт, что класс MyColorRect создается на базе
класса MyRect, отражается в определении при помощи
ключевого слова extends.
Для хранения цвета прямоугольника в классе
MyColorRect мы определили защищенное поле rectColor класса
Color.
Через первые четыре параметра конструктору
класса MyColorRect передаются координаты углов
прямоугольника, а через последний - его цвет (как
ссылка на объект класса Color):
MyColorRect(int x1, int y1,
int x2, int y2, Color colr)
{
super(x1, y1, x2, y2);
rectColor = colr;
}
Координаты углов передаются конструктору
базового класса MyRect. Он записывает их в поля x1, y1,
x2 и y2, определенные в базовом классе.
Метод setColor предназначен для изменения цвета
прямоугольника:
public void setColor(Color colr)
{
rectColor = colr;
}
Новое значение цвета, передаваемое методу
через параметр colr, записывается в поле rectColor.
Заметим, что в базовом классе MyRect нет метода
именем setColor. Таким образом, это новый метод,
расширяющий набор методов базового класса.
Что же касается метода toString, то в его задачу
входит отображение как координат углов
прямоугольника, так и его цвета:
public String toString()
{
String sz = "Object MyRect: (" +
x1 + ", " + y1 + ", " +
x2 + ", " + y2 + "), " +
rectColor.toString();
return sz;
}
Метод toString класса MyColorRect перегружает
одноименный метод базового класса MyRect. К концу
возвращаемой им строки он дописывает цвет
прямоугольника в виде текстовой строки,
полученной с помощью метода toString класса Color.
Работа программы ColorRectangle
После запуска программы управление передается
методу main класса ColorRectangle.
При этом вначале метод main создает объект класса
MyColorRect - прямоугольник черного цвета с
координатами углов (0, 0, 10, 20):
MyColorRect rect = new MyColorRect(
0, 0, 10, 20, Color.black);
Для отображения координат углов и цвета
прямоугольника мы получаем строку описания
методом toString, определенном в классе MyColorRect:
String szStr = rect.toString();
Эта строка затем выводится на консоль:
System.out.println(szStr);
Далее программа устанавливает новые
координаты углов прямоугольника:
rect.setMyRect(10, 20, 30, 40);
Заметьте, что здесь вызывается метод setMyRect,
определенный в базовом классе MyRect.
Для установки нового цвета мы вызываем метод
setColor из класса MyColorRect:
rect.setColor(Color.red);
Затем результаты выполненных действий
отображаются на консоли:
szStr = rect.toString();
System.out.println(szStr);
Вот что вы там увидите:
Object MyRect: (0, 0, 10, 20),
java.awt.Color[r=0,g=0,b=0]
Object MyRect: (10, 20, 30, 40),
java.awt.Color[r=255,g=0,b=0]
Так как первоначально цвет прямоугольника был
черный, значения всех цветовых компонент были
равны нулю. После перекрашивания красная
компонента получила максимально возможное
значение, равное 255. Значения остальных компонент
цвета, как и следовало ожидать, не изменились.
Назад Вперед |