поля и методы подкласса
}
В результате подкласс ChildClass будет иметь те же поля и методы, что и суперкласс ParentClass, но к ним добавятся еще поля и методы из описания подкласса.
Объекты, созданные на основе подкласса, не зависят от объектов, созданных на основе суперкласса, и никак не влияют друг на друга.
В листинге 7.1 приведен пример использования суперкласса и подкласса для создания независимых объектов, обладающих разным набором методов.
Листинг 7.1 Создание подкласса на основе пользовательского суперкласса
// описание суперкласса
class MyParentClass {
// числовое поле суперкласса
int number=5;
// текстовое поле суперкласса
String text=«Hello»;
// методы суперкласса
void showText () {
System.out.println (text);
}
void showNumber () {
System.out.println (number);
}
}
// описание подкласса
class MyChildClass extends MyParentClass {
int sum (int a) {
return number+a;
}
}
public class Listing7_1 {
public static void main (String [] args) {
// создаем объект суперкласса
MyParentClass objParent=new MyParentClass ();
// создаем объект подкласса
MyChildClass objChild=new MyChildClass ();
// вызываем методы суперкласса
objParent.showNumber ();
objParent.showText ();
// вызываем методы подкласса
objChild.showNumber ();
objChild.showText ();
// вызываем дополнительный метод подкласса
int b=objChild.sum (12);
// выводим результат вызова метода на печать
System.out.println (b);
}
}
В данном примере мы описали класс MyParentClass, в котором определены два поля – целочисленное и текстовое, а также два метода для вывода этих полей на печать.
Допустим, что при использовании одного из объектов класса нам приходится регулярно суммировать некие числа со значением целочисленного поля number. Очевидно, что для этого необходимо добавить метод, которого нет в описании класса. Конечно, можно было бы переписать класс MyParentClass, добавив в него новый метод. Но в случае, когда класс проверен, отлажен и применяется во многих других программах, не следует редактировать его по любому поводу, рискуя внести ошибку или путаницу в готовый код.
Для внесения изменений и дополнений мы воспользуемся механизмом наследования. Создадим подкласс MyChildClass, в котором опишем дополнительный метод sum (). Подкласс полностью наследует открытые поля и методы суперкласса, поэтому метод sum () свободно обращается к полю number. Это поле объявлено и существует, хотя и не упомянуто в явном виде при описании подкласса.
Далее, в главном методе программы мы создаем объект суперкласса objParent и объект подкласса objChild. Еще раз подчеркну, что это абсолютно равноправные и независимые объекты. Разница лишь в том, что объект objChild располагает методом sum (), которого нет у объекта objParent.
Убедимся в том, что свойства объектов именно такие, как ожидалось. Сначала выведем на печать содержимое полей объекта objParent:
objParent.showNumber ();
objParent.showText ();
Затем