
- •Глава 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
Глава 6. Введение в классы 157
Эта программа генерирует следующий вывод:
Стек в mystackl:
9
8
7
6 . - .
5
4
3
2
1
о
Стек в mystack2:
19 '
18
17
16
15
14
13
12
11
10
Нетрудно заметить, что содержимое каждого стека различно.
Наконец, последнее замечание относительно класса stack: в данной реализации возможно изменение массива stck, который содержит стек, кодом, находящимся вне класса stack, оставляя его открытым для неправильного использования или повреждений. В следующей главе вы увидите, как исправить эту ситуацию.
Глава 7
Методы и классы
Эта глава продолжает обсуждение методов и классов, начатое в предшествующей главе. В ней рассматривается несколько тем, касающихся методов, включая перегрузку, передачу параметров и рекурсию. Затем изложение возвращается к классам, обсуждая управление доступом, использование ключевого слова static и один из наиболее важных встроенных Java-классов
String.
Перегрузка методов
В языке Java в пределах одного класса можно определить два или более методов, которые совместно используют одно и то же имя, но имеют разное количество параметров. Когда это имеет место, методы называют перегруженными, а о процессе говорят как о перегрузке метода. Перегрузка методов — один из способов, с помощью которого Java реализует полиморфизм. Если вы никогда не пользовались языком, допускающим перегрузку методов, то концепция может сначала показаться странной. Но, как вы увидите, перегрузка метода — одна из наиболее захватывающих и полезных особенностей языка Java.
Чтобы определить при вызове, какую версию перегруженного метода в действительности вызывать, Java руководствуется типом и/или числом его параметров. Таким образом, перегруженные методы должны отличаться по типу и/или числу их параметров. Хотя такие методы могут иметь различные типы возвращаемого значения, однако одного его недостаточно, чтобы различить две версии метода. Когда Java сталкивается с вызовом перегруженного метода, он просто выполняет его (метод) версию, чьи параметры соответствуют параметрам, используемым в вызове.
Глава 7. Методы и классы 159
Простой пример, который иллюстрирует перегруженный метод:
// Демонстрация перегруженного метода, class OverloadDemo {
void test() {
System.out.println("Параметры отсутствуют");
}
// Перегруженный метод test с одним int-параметром. void test(int a) j
System.out.println("a: " + a); }
// Перегруженный метод test с двумя int-параметрами. void testtint a, int b) {
System.out.println("а и Ь: " + a + " " + b); }
// Перегруженный метод test с double-параметром, double test(double a) {
System.out.println("Вещественное двойной точности а: " + a),
return a*a; } }
class Overload {
public static void main(String arcfs [] ) { OverloadDemo ob = new OverloadDemo(); double result;
// вызвать все версии testf) ob.test(); ob.test(10); ob.test(10, 20); result = ob.test(123.2);
System.out.println("Результат ob.test(123.2): " + result) } }
Эта программа генерирует следующий вывод:
Параметры отсутствуют
а: 10
а и Ь: 10 20
Вещественное двойной точности а: 123.2
Результат ob.test(123.2): 15178.24
Как можно видеть, test о перегружен четыре раза. Первая версия не имеет никаких параметров, вторая имеет один параметр целого типа, третья — два
160 Часть I. Язык Java
целочисленных параметра, а четвертая — один double-параметр. Тот факт, что четвертая версия test о еще и возвращает значение, не имеет никакого отношения к перегрузке, так как типы возвращаемых значений не играют никакой роли для выбора перегруженных методов.
Когда вызывается перегруженный метод, Java ищет соответствие между аргументами вызова метода и его параметрами. Однако это соответствие не всегда может быть точным. В некоторых случаях определенную роль в выборе перегруженного метода могут сыграть автоматические преобразования типов Java. Например, рассмотрим следующую программу:
// Автоматическое преобразование типов в применении к перегрузке, class OverloadDemo {
void test() {
System.out.println("Параметры отсутствуют");
}
// Перегруженный test с двумя int-параметрами. void test(int a, int b) {
System.out.println("а и b: " + a + " " + b); }
// Перегруженный test с double-параметром и возвращаемым типом, void test(double a) {
System.out.println("Внутри test(double) a: " + a); } '
}
class Overload {
public static void main(String args[]) { OverloadDemo ob = new OverloadDemo (); int i = 88;
ob.testO;
ob.test(10, 20);
ob.test(i); // здесь будет вызван test(double) ob.test(123.2); // здесь будет вызван test(double) } }
Эта программа генерирует следующий вывод:
Параметры отсутствуют
а и Ь: 10 20
Внутри test (double) a: 88
Внутри test (double) a: 123.2