
- •Глава 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, Наследование 195
Переменная суперкласса
может ссылаться на объект подкласса
Ссылочной переменной суперкласса может быть назначена ссылка на любой подкласс, производный от того суперкласса. Вы найдете этот аспект наследования весьма полезным в ряде ситуаций. Рассмотрим следующий пример:
class RefDemo {
public static void main(String args(J) {
BoxWeight weightbox = new BoxWeight (3, 5, 7, 8.37); Box plainbox = new Box(}; double vol;
vol = weightbox.volume ();
System.out.println("Объем weightbox равен " + vol);
System.out.println("Bee weightbox равен " + weightbox.weight);
System.out.println();
// назначить ссылку на BoxWeight ссылке на Box plainbox = weightbox;
vol = plainbox.volume(); // OK, volume О определена в Box System.out.println("Объем plainbox равен " + vol);
/* Следующее утверждение не верно, потому что plainbox
не определяет член weight. */ // System.out.println("Вес plainbox равен " + plainbox.weight);
} }
Здесь eightbox — ссылка на объекты BoxWeight, a plainbox — ссылка на вох-объекты. Так как BoxWeight — подкласс box, допустимо назначить piainbox-
ССЫЛКУ На Объект weightbox.
Важно понять, что тип ссылочной переменной, а не тип объекта, на который она ссылается, определяет, к каким членам можно обращаться. То есть, когда ссылка на объект подкласса указывает на ссылочную переменную суперкласса, вы будете иметь доступ только к тем частям объекта, которые определены суперклассом. Вот почему plainbox не может ссылаться на weight, даже когда она ссылается на Boxweight-объект. Если подумать, то данное взаимодействие оправдано, потому что суперкласс не знает, что к нему добавляет подкласс. Вот почему последняя строка кода в предшествующем фрагменте закомментирована. У ссылки нет возможности обратиться к полю weight, потому что в box оно не определено.
Хотя предыдущие рассуждения могут показаться немного экзотическими, с ним связаны некоторые важные практические приложения (два таких приложения обсуждаются позже в этой главе).
196 Часть I. Язык Java
Использование ключевого слова super
В предшествующих примерах классы, производные от box, не были реализованы так эффективно или устойчиво, как это могло бы быть. Например, конструктор класса Boxweight явно инициализирует поля width, height и depth метода box (). Мало того, что он дублирует код своего суперкласса, что неэффективно, но это означает, что подклассу должен быть предоставлен доступ к этим членам. Однако наступит момент, когда вы захотите создать суперкласс, который сохраняет подробности своей реализации для себя (т. е. хранит свои компоненты данных как private). В этом случае у подкласса не будет никакой возможности прямого доступа или инициализации этих переменных как своих собственных. Так как инкапсуляция это первичный атрибут OOP, не удивительно, что Java обеспечивает решение этой проблемы. Всякий раз, когда подкласс должен обратиться к своему непосредственному суперклассу, он может сделать это при помощи ключевого слова super.
Ключевое слово super имеет две общие формы. Первая вызывает конструктор суперкласса. Вторая используется для доступа к элементу суперкласса, который был скрыт элементом подкласса. Далее рассматриваются обе формы.
Вызов конструктора суперкласса с помощью первой формы super
Подкласс может вызывать метод конструктора, определенный его суперклассом, при помощи следующей формы super:
super (parameter-list) ;
Здесь parameter-list — список параметров, который определяет любые параметры, необходимые конструктору в суперклассе. Похожий по форме на конструктор super () должен всегда быть первым оператором, выполняемым внутри конструктора подкласса.
Чтобы посмотреть, как super о используется, приведем следующую улучшенную версию класса Boxweight:
// BoxWeight теперь использует super для инициализации Box-атрибутов, class BoxWeight extends Box {
double weight; // вес блока
// инициализировать width, height и depth, используя super() BoxWeight(double w, double h, double d, double m) {
super(w, h, d); // вызвать конструктор суперкласса
weight = m; } }