Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
Triangle(double х) {
super(х); // вызвать конструктор суперкласса
style = "isosceles";
}
double area() {
return getWidth() * getHeightO / 2;
}
void showStyle() {
System.out.println("Triangle is " + style);
}
}
// Подкласс, производный от класса Triangle.
// Класс ColorTriangle является подклассом,
// производным от класса Triangle, который, в
// свою очередь, расширяет класс TwoDShape.
// Следовательно, в класс ColorTriangle входят переменные
// и методы как из класса Triangle, так из класса TwoDShape.
class ColorTriangle extends Triangle {
private String color;
ColorTriangle(String c, String s,
double w, double h) {
super(s, w, h);
color = c;
}
String get.Color() { return color; }
void showColor() {
System.out.println("Color is " + color);
}
}
class Shapes6 {
public static void main(String args[ ]) {
ColorTriangle tl =
new ColorTriangle("Blue", "right", 8.0, 12.0);
ColorTriangle.t2 =
new ColorTriangle("Red", "isosceles", 2.0, 2.0);
System.out.println("Info for tl: ");
tl.showStyle();
tl.showDim();
tl.showColor();
System.out.println ("Area is " + tl.areaO);
System.out.println ();
System.out.println("Info for t2: ");
// Из объекта типа ColorTriangle можно вызывать как его
// собственные методы, так и методы его суперклассов.
t2.showStyle ();
t2.showDim();
t2.showColor ();
System.out.println("Area is " + t2.area());
}
}
Результат выполнения данной программы выглядит следующим образом:
Info for tl:
Triangle is right
Width and height are 8.0 and 12.0
Color is Blue
Area is 48.0
Info for t2:
Triangle is isosceles
Width and height are 2.0 and 2.0
Color is Red
Area is 2.0
Благодаря наследованию в классе ColorTriangle можно использовать ранее определенные классы Triangle и TwoDShape, дополняя их лишь данными, необходимыми для конкретного применения класса ColorTriangle. Таким образом, наследование способствует повторному использованию кода.
Данный пример демонстрирует еще одну важную деталь: оператор super () всегда обращается к конструктору ближайшего суперкласса. Иными словами, оператор super () в классе ColorTriangle означает вызов конструктора класса Triangle, а в классе Triangle — вызов конструктора класса TwoDShape. Если в иерархии классов для конструктора суперкласса предусмотрены параметры, то все суперклассы должны передавать их вверх по иерархической структуре. Это правило действует независимого от того, нужны ли параметры самому подклассу или не нужны.
Порядок вызова конструкторов
В связи с изложенным выше в отношении наследования и иерархии классов может возникнуть следующий резонный вопрос: когда создается объект подкласса и какой конструктор выполняется первым: тот, что определен в подклассе, или же тот, что определен в суперклассе? Так, если имеется суперкласс А и подкласс В, то вызывается ли конструктор класса А раньше конструктора класса В, или же наоборот? Ответ на этот вопрос состоит в том, что в иерархии классов конструкторы вызываются по порядку выведения классов: от суперкласса к подклассу. Более того, оператор super () должен быть первым в конструкторе подкласса, и поэтому порядок, в котором вызываются конструкторы, остается неизменным, независимо от того, используется ли оператор super () или нет. Если оператор super () отсутствует, то выполняется конструктор каждого суперкласса по умолчанию (т.е. конструктор без параметров). В следующем примере программы демонстрируется порядок вызова конструкторов:
// Демонстрация порядка вызова конструкторов.