
- •Глава 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. Наследование 197
Здесь BoxWeighto вызывает super о с параметрами w, h и d. Используя эти параметры, super о вызывает конструктор box о, который инициализирует width, height и depth. BoxWeight больше не инициализирует эти значения самостоятельно. Он нуждается в инициализации только уникальной для него переменной — weight. box, если пожелает, может закрыть свои переменные (сделать ИХ private) .
В предыдущем примере, super () вызывался с тремя параметрами. Так как конструкторы могут быть перегружены, super (} может вызывать любую их форму, определенную в суперклассе. Выполняться будет тот конструктор, который соответствует аргументам super о. Например, имеется законченная реализация BoxWeight, которая обеспечивает конструкторы для различных способов создания блока. В каждом случае вызывается super о, использующий соответствующие параметры. Обратите внимание, что width, height
И depth объявлены ЧаСТНЫМИ (private) В Классе Box.
// Полная реализация BoxWeight. class Box {
private double width;
private double height;
private 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; }
198 Часть I. Язык Java
/I вычислить и возвратить объем double volume() {
return width * height * depth; } }
// BoxWeight теперь полностью реализует все конструкторы, class BoxWeight extends Box {
double weight; // вес блока
// построить клон объекта
BoxWeight{BoxWeight ob) { // передать объект конструктору
super(ob);
weight = ob.weight; }
// конструктор, используемый для всех размеров BoxWeight(double w, double h, double d, double m) {
super(w, h, d); // вызвать конструктор суперкласса
weight = m; }
// конструктор по умолчанию BoxWeight() {
super (};
weight = -1; }
// конструктор, используемый для создания куба BoxWeight(double len, double m) { super(len); weight = m; } }
class DemoSuper {
public static void main (String args[]) {
BoxWeight myboxl = new BoxWeight (10, 20, 15, 34.3); BoxWeight mybox2 = new BoxWeight(2, 3, 4, 0.076); BoxWeight mybox3 = new BoxWeight (); // по умолчанию BoxWeight mycube = new BoxWeight (3, 2); BoxWeight myclone = new BoxWeight (myboxl }; double vol;
vol = myboxl . volume ( ) ;
System. out .println ("Объем myboxl равен " + vol);
System. out .println ("Bee myboxl равен " + myboxl .weight) ;
System. out. println () ;
Глава 8, Наследование 199
vol = mybox2.volume(};
System.out.println("Объем mybox2 равен " + vol); System.out.println("Bee mybox2 равен " + mybox2.weight); System.out.println(} ;
vol = mybox3,volume() ;
System.out.println("Объем туЬохЗ равен " + vol);
System.out.println("Вес туЬохЗ равен " + туЬохЗ.weight);
System.out.println();
vol = myсlone.volume();
System.out.println("Объем myclone равен " + vol);
System.out.println("Bee mycione равен " + myclone.weight);
System.out.println();
vol = mycube.volume();
System.out.println("Объем mycube равен " + vol); System.out.println("Bee mycube равен " + mycube.weight); System.out.println() ; ) }
Эта программа генерирует следующий вывод:
Объем myboxl равен 3000.0 Вес myboxl равен 34.3
Объем mybox2 равен 24.0 Вес mybox2 равен 0.076
Объем туЬохЗ равен -1.0 Вес туЬохЗ равен -1.0
Объем myclone равен 3000.0 Вес myclone равен 34.3
Объем mycube равен 27.0 Вес mycube равен 2.О
Обратите особое внимание на следующий конструктор в BoxWeight ():
// построить клон объекта
BoxWeight(BoxWeight ob) { // передать объект конструктору
super(ob);
we i ght = ob. we i ght;
}
Заметьте, super о вызывается с объектом типа BoxWeight — не типа box. Но вызывается при этом все еще конструктор box (Box ob) . Как было упомянуто
200 Часть I. Язык Java
ранее, переменная суперкласса может использоваться для ссылки на любой производный объект этого класса. Таким образом, мы способны передать объект BoxWeight конструктору box. Но, конечно, только box "знает" свои собственные члены.
Сделаем обзор ключевых концепций super о. Когда подкласс вызывает super (), он вызывает конструктор своего непосредственного суперкласса. Таким образом, super () всегда обращается к непосредственному суперклассу вызывающего класса. Это справедливо даже в многоуровневой иерархии. Кроме того, super () всегда должен быть первым оператором, выполняемым внутри конструктора подкласса.
Использование второй формы super
Вторая форма super действует в чем-то подобно ссылке this, за исключением того, что она всегда обращается к суперклассу подкласса, в котором используется. Общий формат такого использования super имеет вид:
super.member
где member может быть либо методом, либо переменной экземпляра.
Вторая форма super больше всего применима к ситуациям, когда имена элементов (членов) подкласса скрывают элементы с тем же именем в суперклассе. Рассмотрим следующую простую иерархию классов:
// Использование super для преодоления скрытия имен, class A (
int i ; }
// Создание подкласса В расширением класса А. class В extends A {
int i; // этот i скрывает i в А
В(int a, int b) {
super.i = a; I/ i из А
i = b; // i из В
}
void show() {
System.out.println("i из суперкласса: " + super.i) ;; System.out.println("i из подкласса: " + i); } }
class UseSuper {
public static void main(String args[]) { В subOb = new В(1, 2);