Более реальный пример

Рассмотрим более реальный пример, который поможет проиллюстрировать возможности наследования. В нем мы расширим последнюю версию класса Box, разработанную в предыдущей главе, добавив в нее четвертый компонент, который назовем weight (вес). Таким образом, новый класс будет содержать ширину, высоту, глубину и вес параллелепипеда.

// В этой программе наследование используется для расширения класса Box.
class Box {
double width;
double height;
double depth;
// конструирование клона объекта
Box(Box ob) {
// передача объекта конструктору
width = ob.width;
height = ob.height;
depth = ob.depth;
}
// конструктор, используемый при указании всех измерений
Box(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
// конструктор, используемый, если ни одно из изменений не указано
Box () {
width = -1; // значение -1 используется для указания
height = -1; // неинициализированного
depth = -1; // параллелепипеда
}
// конструктор, используемый при создании куба Box(double len) {
width = height = depth = len;
}
// вычисление и возврат объема
double volume() {
return width * height * depth;
}
}
// Расширение класса Box включением в него веса.
class BoxWeight extends Box {
double weight; // вес параллелепипеда
// конструктор BoxWeight
BoxWeight(double w, double h, double d, double m) {
width = w;
height = h;
depth = d;
weight = m;
class DemoBoxWeight {
public static void main(String args[]) {
BoxWeight myboxl = new BoxWeight(10, 20, 15, 34.3);
BoxWeight mybox2 = new BoxWeight(2, 3, 4, 0.076);
double vol; vol = myboxl.volume();
System.out.println("Объем myboxl равен " + vol);
System.out.println("Bee myboxl равен " + myboxl.weight) System.out.println() ;
vol = mybox2.volume();
System.out.println("Объем mybox2 равен " + vol);
System.out.println("Bee mybox2 равен " + mybox2.weight)
}
}

Эта программа генерирует следующий вывод:

Объем myboxl равен 3000.0
Вес myboxl равен 34.3
Объем mybox2 равен 24.0
Вес mybox2 равен 0.07 6

Класс BoxWeight наследует все характеристики класса Box и добавляет к ним компонент weight. Классу BoxWeight не нужно воссоздавать все характеристики класса Box. Он может просто расширять Box в соответствии с конкретными целями.

Основное преимущество наследования состоит в том, что как только суперкласс, который определяет общие атрибуты набора объектов, создан, его можно использовать для создания любого числа более специализированных классов. Каждый подкласс может точно определять свою собственную классификацию. Например, следующий класс наследует характеристики класса Box и добавляет атрибут цвета.

// Этот код расширяет класс Box, включая в него атрибут цвета.
class ColorBox extends Box {
int color; // цвет параллелепипеда
ColorBox(double w, double h, double d, int c) {
width = w;
height = h;
depth = d;
color = c;
}
}

Помните, как только суперкласс, который определяет общие аспекты объекта, создан, он может наследоваться для создания специализированных классов. Каждый подкласс добавляет собственные уникальные атрибуты. В этом заключается сущность наследования.