Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
System.out.println ("Area is " + tl.areaO);
System.out.println() ;
System.out.println("Info for t2: ");
t2.showStyle();
t2.showDim();
System.out.println("Area is " + t2.area());
}
}
В приведенном выше примере программы объект t2 конструируется на основании объекта tl, и поэтому они идентичны. Результат выполнения данной программы выглядит следующим образом:
Info for tl:
Triangle is right
Width and height are 8.0 and 12.0
Area is 48.0
Info for t2:
Triangle is right
Width and height are 8.0 and 12.0
Area is 48.0
Обратите внимание на конструктор класса Triangle, код которого приведен ниже.
// построить один объект на основании другого объекта
Triangle(Triangle ob) {
// Передача ссылки на объект Triangle конструктору класса TwoDShape.
super(ob);
style = ob.style;
}
В качестве параметра данному конструктору передается объект Triangle, который затем с помощью вызова super () передается конструктору TwoDShape, как показано ниже.
// Построение одного объекта на основании другого объекта.
TwoDShape(TwoDShape ob) {
width = ob.width;
height = ob.height;
}
Следует заметить, что конструктор TwoDshape () должен получить объект типа TwoDShape, но конструктор Triangle () передает ему объект типа Triangle. Тем не менее никаких недоразумений не возникает. Ведь, как пояснялось ранее, переменная ссылки на суперкласс может ссылаться на объект производного от него подкласса. Следовательно, конструктору TwoDShape () можно передать ссылку на экземпляр подкласса, производного от класса TwoDShape. Конструктор TwoDShape () инициализирует лишь те части передаваемого ему объекта подкласса, которые являются членами класса TwoDShape, и поэтому не имеет значения, содержит ли этот объект дополнительные члены, добавленные в производных подклассах.
Переопределение методов
В иерархии классов часто присутствуют методы с одинаковой сигнатурой и одинаковым возвращаемым значением как в суперклассе, так и в подклассе. В этом случае говорят, что метод суперкласса переопределяется в подклассе. Если переопределяемый метод вызывается из подкласса, то всегда выбирается тот вариант метода, который определен в подклассе. А вариант метода, определенный в суперклассе, скрывается. Рассмотрим в качестве примера следующий фрагмент кода:
// Переопределение метода,
class А {
int i, j;
A(int a, int b) {
i = a;
j = b;
}
// отобразить переменные i и j
void show() {
System.out.println("i and j: " + i + " " + j) ;
}
}
class В extends A {
int k;
В(int a, int b, int c) {
super(a, b);
k = c;
}
// Отображение переменной к. Данный метод переопределяет
// метод show() из класса А.
void show() {
System.out.println("k: " + к);
}
}
class Override {
public static void main(String args[]) {
В subOb = new B(l, 2, 3) ;
subOb.show(); // вызвать метод show() из класса В
}
}
Выполнение этого фрагмента кода дает следующий результат:
к: 3
Когда метод show () вызывается для объекта типа В, выбирается вариант этого метода, определенный в классе В. Таким образом, вариант метода show () в классе В переопределяет вариант одноименного метода, объявленный в классе А.
Если требуется обратиться к исходному варианту переопределяемого метода, т.е. тому, который определен в суперклассе, следует воспользоваться ключевым словом super. Например, в приведенном ниже варианте класса В из метода show () вызывается вариант того же метода, определенный в суперклассе. При этом отображаются все переменные экземпляра.
class В extends А {
int к;