Главная страница

АБОБА. Справочник по программированию на Java Методическое пособие


Скачать 242.41 Kb.
НазваниеСправочник по программированию на Java Методическое пособие
АнкорАБОБА
Дата20.02.2022
Размер242.41 Kb.
Формат файлаdocx
Имя файла12642_java_method_1.docx
ТипСправочник
#368066
страница44 из 67
1   ...   40   41   42   43   44   45   46   47   ...   67

Доступ к членам и наследование


Хотя подкласс включает в себя все члены своего суперкласса, он не может получать доступ к тем членам суперкласса, которые объявлены как private. Например, рассмотрим следующую простую иерархию классов:

/* В иерархии классов приватные члены остаются приватными

для своего класса.

Эта программа содержит ошибку, и ее компиляция

будет невозможна.

*/

// Создание суперкласса.

class A {

int i; // общедоступная по умолчанию

private int j; // приватная для A

void setij(int x, int y) {

i = x;

j = y;

}

}

// Переменная j класса A в этом классе недоступна.

class B extends A {

int total;

void sum() {

total = i + j; // ОШИБКА, j в этом классе недоступна

}

}

class Access {

public static void main(String args[]) {

B subOb = new B();

subOb.setij(10, 12);

subOb.sum();

System.out.println("Сумма равна " + subOb.total);

}

}

Компиляция этой программы будет невозможна, поскольку ссылка на переменную j внутри метода sum() класса B приводит к нарушению правил доступа. Поскольку переменная j объявлена как private, она доступна только другим членам ее собственного класса. Подкласс не имеет к ней доступа.

Рассмотрим более реальный пример, который поможет проиллюстрировать возможности наследования. В нем мы расширим последнюю версию класса 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 mybox1 = new BoxWeight(10, 20, 15, 34.3);

BoxWeight mybox2 = new BoxWeight(2, 3, 4, 0.076);

double vol;

vol = mybox1.volume();

System.out.println("Объем mybox1 равен " + vol);

System.out.println("Вес mybox1 равен " + mybox1.weight);

System.out.println();

vol = mybox2.volume();

System.out.println("Объем mybox2 равен " + vol);

System.out.println("Вес mybox2 равен " + mybox2.weight);

}

}

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

Объем mybox1 равен 3000.0

Вес mybox1 равен 34.3

Объем mybox2 равен 24.0

Вес mybox2 равен 0.076

Класс 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;

}

}

Помните, как только суперкласс, который определяет общие аспекты объекта, создан, он может наследоваться для создания специализированных классов. Каждый подкласс добавляет собственные уникальные атрибуты. В этом заключается сущность наследования.
1   ...   40   41   42   43   44   45   46   47   ...   67


написать администратору сайта