
- •Глава 2
- •Глава 2. Обзор языка Java 31_
- •Глава 2. Обзор языка Java
- •Глава 2. Обзор языка Java 37
- •Глава 2. Обзор языка Java 39
- •Глава 2. Обзор языка Java 41
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 43_
- •Глава 2. Обзор языка Java 45_
- •Глава 2. Обзор языка Java 47
- •Глава 2. Обзор языка Java 49_
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 57
- •Глава 3
- •Глава 3. Типы данных, переменные и массивы 53
- •Глава 3. Типы данных, переменные и массивы _ 55
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 59_
- •Глава 3. Типы данных, переменные и массивы 61_
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 65_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 67_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 69_
- •Глава 3. Типы данных, переменные и массивы 71_
- •Глава 3. Типы данных, переменные и массивы 73_
- •Глава 3. Типы данных, переменные и массивы
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы _ 77_ Эта программа генерирует следующий вывод:
- •Глава 3. Типы данных, переменные и массивы 79
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 81_
- •Глава 4
- •Глава 4. Операции 83
- •84 Часть I. Язык Java
- •Глава 4. Операции 85_
- •Глава 4. Операции 87_
- •88_ Часть I. Язык Java
- •Глава 4. Операции 89
- •Глава 4. Операции 91_
- •Глава 4. Операции 93_
- •Глава 4. Операции 95_
- •Глава 4. Операции 97_
- •Глава 4. Операции 99
- •Глава 4. Операции 101
- •Глава 4. Операции 103
- •104 Часть I, Язык Java
- •Глава 4. Операции 105
- •Глава 5
- •Глава 5, Управляющие операторы 107
- •Глава 5. Управляющие операторы 109
- •110 Часть I. Язык Java
- •Глава 5, Управляющие операторы 111
- •Глава 5. Управляющие операторы 113
- •Глава 5. Управляющие операторы
- •Глава 5. Управляющие операторы 117
- •118 Часть I. Язык Java
- •Глава 5. Управляющие операторы 119
- •Глава 5. Управляющие операторы 121
- •122 Часть I. Язык Java
- •Глава 5. Управляющие операторы 123
- •Глава 5. Управляющие операторы 125
- •Глава 5. Управляющие операторы 127
- •Глава 5. Управляющие операторы 129
- •Глава 5. Управляющие операторы
- •Глава 6
- •134 Часть I. Язык Java
- •Глава 6. Введение в классы 135
- •136 Часть I. Язык Java
- •Глава 6. Введение в классы _ 137
- •Глава 6. Введение в классы 139
- •Глава 6. Введение в классы
- •Глава 6. Введение в классы 143
- •Глава 6. Введение в классы 145
- •Глава 6. Введение в классы 147
- •Глава 6. Введение в классы 149
- •Глава 6. Введение в классы 151
- •154 Часть I. Язык Java
- •Глава 6. Введение в классы 155
- •Глава 6. Введение в классы 157
- •Глава 7
- •Глава 7. Методы и классы 159
- •Глава 7. Методы и классы . 161
- •Глава 7. Методы и классы • 163
- •164 Часть I. Язык Java
- •Глава 7. Методы и классы 165
- •Глава 7. Методы и классы 167
- •Глава 7. Методы и классы 169
- •Глава 7, Методы и классы 171-
- •Глава 7. Методы и классы 173
- •Глава 7. Методы и классы 775
- •Глава 7. Методы и классы 177
- •Глава 7. Методы и классы ' 179
- •Глава 7. Методы и классы 1_81_
- •Глава 7. Методы и классы 1_83
- •184 '• Часть I. Язык Java
- •Глава 7. Методы и классы . 185
- •Глава 7. Методы и классы 187
- •Глава 8
- •Глава 8. Наследование 191
- •Глава 8. Наследование 193
- •Глава 8, Наследование 195
- •Глава 8. Наследование 197
- •198 Часть I. Язык Java
- •Глава 8, Наследование 199
- •Глава 8. Наследование 201
- •202 Часть I. Язык Java
- •Глава 8. Наследование 203
- •Глава 8. Наследование 205
- •Глава 8. Наследование 207
- •Глава 8. Наследование 209
- •Глава 8. Наследование 211
- •Глава 8. Наследование 213
- •Глава 8. Наследование 215
- •Глава 8. Наследование 217
- •Глава 12
- •Глава 12. Ввод/вывод, апплеты и другие темы 303_
- •Глава 12. Ввод/вывод, апплеты и другие темы . 305
- •Глава 12. Ввод/вывод, алплеты и другие темы 307
- •Глава 12. Ввод/вывод, апплеты и другие темы 309
- •Глава 12. Ввод/вывод, апплеты и другие темы 311
- •Глава 12. Ввод/вывод, апплаты и другие темы 313
- •314 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 315
- •Глава 12. Ввод/вывод, апплеты и другие темы 317
- •Глава 12. Ввод/вывод, апплеты и другие темы 319
- •320 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 321
- •Глава 12. Ввод/вывод, апплеты и другие темы 323
- •324 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 325
- •326 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплегы и другие темы 327
Глава 8. Наследование 191
Вывод этой программы:
Содержимое supe rOb: i и j : 10 20
Содержимое subOb: i и j: 7 8 k: 9
Сумма i, j и k в subOb: i+j+k: 24
Ниже показана общая форма объявления класса, который наследует суперкласс:
class subclass-name extends superclass-name {
11 тело класса }
ГДе subclass-name — ИМЯ ПОДКласса, superclass-name — ИМЯ суперкласса.
Можно определять только один суперкласс для любого подкласса, который вы создаете. Java не поддерживает наследования множества суперклассов в одиночном подклассе. (Это отличается от C++, в котором можно наследовать множественные базовые классы.) Можно создавать иерархию наследования, в которой подкласс становится суперклассом другого подкласса. Однако никакой класс не может быть суперклассом самого себя.
Доступ к элементам и наследование
Хотя подкласс включает все элементы (члены) своего суперкласса, он не может обращаться к тем элементам суперкласса, которые были объявлены как private. Например, рассмотрим следующую простую иерархию классов:
/* В иерархии классов private члены остаются private для ее классов.
Эта программа содержит ошибку и не будет компилироваться. */
// Создать суперкласс, class A {
int i; // public по умолчанию
private int j; // private для А
void setij(int x, int y) { i = x;
j = y; } }
192 Часть I. Язык Java
// j класса А здесь не доступна, class В extends A { int total;
void sum () {
total = i + j; // ОШИБКА, j здесь не доступна } }
class Access {
public static void main (String args[]) { В subOb = new В();
subOb.setij(10, 12);
subOb.sum();
System.out.println("Всего " + ,subOb.total) ; } }
Эта программа не будет компилироваться, потому что ссылка на j внутри метода sum о класса в вызывает нарушение правил доступа. С тех пор как j объявлена с помощью private, она доступна только другим членам его собственного класса. Подклассы не имеют доступа к ней.
Член класса, который был объявлен как private, остается private для этого класса. Он не доступен любым кодам вне его класса, включая подклассы.
Практический пример
Рассмотрим практический пример, который поможет проиллюстрировать мощь наследования. Последняя версия класса box, разработанного в предшествующей главе, будет расширена, чтобы включить четвертый компонент с именем weight. Таким образом, новый класс будет содержать ширину, высоту, глубину и вес блока.
// Программа использует наследование для расширения Box. class Box {
double width;
double height;
double depth;
// создать клон объекта
Box(Box ob) { // передать объект конструктору
width = ob. width;
Глава 8. Наследование 193
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;
194 Часть I. Язык Java
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.076
Boxweight наследует все характеристики box и прибавляет к ним компонент weight. Для Boxweight нет необходимости заново создавать все свойства box; Можно просто расширить box, чтобы достичь своих собственных целей.
Главное преимущество наследования состоит в том, что, как только вы создали суперкласс, который определяет общие для набора объектов атрибуты, его можно использовать для создания любого числа, более специфичных подклассов. Каждый подкласс может добавить свою собственную классификацию. Например, следующий класс наследует box и прибавляет цветовой атрибут:
// Box расширяется для включения цвета. . class ColorBox extends Box { int. color; // color of box
ColorBox(double w, double h, double d, int c) { width = w; height = h; depth = d; color = c; } }
Помните, как только вы создали суперкласс, который определяет общие аспекты объекта, этот суперкласс может наследоваться для формирования специализированных классов. Каждый подкласс просто прибавляет свои собственные, уникачьные атрибуты. В этом сущность наследования.