Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
Демонстрация механизма переопределения методов на примере класса TwoDShape Для того чтобы стало понятнее, насколько эффективным является механизм переопределения методов, продемонстрируем его на примере класса TwoDShape. В приведенных ранее примерах в каждом классе, порожденном от класса TwoDShape, определялся метод area (). Теперь мы знаем, что в этом случае имеет смысл включить метод area () в состав класса TwoDShape и позволить каждому его подклассу переопределить этот метод: в частности, реализовать вычисление площади в зависимости от конкретного типа геометрической фигуры. Именно такой подход и воплощен в приведенном ниже примере программы. Для удобства в класс TwoDShape добавлено поле name, упрощающее написание демонстрационных программ.
// Применение динамической диспетчеризации методов.
class TwoDShape {
private double width;
private double height;
private String name;
// Конструктор по умолчанию.
TwoDShape() {
width = height = 0.0;
name = "null";
}
// Параметризированный конструктор.
TwoDShape(double w, double h, String n) {
width = w;
height = h;
name = n;
}
// построить объект с одинаковыми значениями
// переменных экземпляра width и height
TwoDShape(double х, String n) {
width = height = x;
name = n;
}
// построить один объект на основании другого объекта
TwoDShape(TwoDShape ob) {
width = ob.width;
height = ob.height;
name = ob.name;
}
// Методы доступа к переменным width и height,
double getWidth() { return width; }
double getHeightO { return height; }
void setWidth(double w) { width = w; }
void setHeight(double h) { height = h; }
String getName() { return name; }
void showDim() {
System.out.println("Width and height are " +
width + " and " + height);
}
// Метод area() определен в классе TwoDShape.
double area() {
System.out.println("area() must be overridden");
return 0.0;
}
}
// Подкласс, производный от класса TwoDShape,
// для представления треугольников,
class Triangle extends TwoDShape {
private String style;
// Конструктор по умолчанию.
Triangle() {
super();
style = "null";
}
// Конструктор класса Triangle.
Triangle(String s, double w, double h) {
super(w, h, "triangle");
style = s;
}
// Конструктор с одним аргументом для построения треугольника
Triangle(double х) {
super(х, "triangle"); // вызвать конструктор суперкласса
style = "isosceles";
}
// построить один объект на основании другого объекта
Triangle(Triangle ob) {
super(ob); // передать объект конструктору класса TwoDShape
style = ob.style;
}
// Переопределение метода area() для класса Triangle.
double area() {
return getWidth() * getHeight() / 2;
}
void showStyle() {
System.out.println("Triangle is " + style);
}
}
// Подкласс, производный от класса TwoDShape,
// для представлёния прямоугольников,
class Rectangle extends TwoDShape {
// Конструктор по умолчанию.
Rectangle() {
super();
}
// Конструктор класса Rectangle.
Rectangle(double w, double h) {
super(w, h, "rectangle"); // вызвать конструктор суперкласса
}
// построить квадрат
Rectangle(double х) {
super(х, "rectangle"); // вызвать конструктор суперкласса
}
// построить один объект на основании другого объекта
Rectangle(Rectangle ob) {