- •Оглавление
- •Предисловие
- •Введение
- •Глава 1. Средства разработки приложений
- •1.1. Системные требования
- •1.2. Введение в NetBeans
- •1.3. Установка NetBeans
- •1.4. Первый запуск NetBeans
- •1.5. Интерфейс пользователя
- •1.6. Настройки среды
- •1.7. Создание проекта
- •Глава 2. Язык программирования Java
- •2.1. Первое приложение
- •2.2. Метод main
- •2.3. Основные понятия языка Java
- •2.3.1. Переменные и константы
- •2.4. Примитивные типы данных
- •2.4.1. Целые и символьные типы(byte, short, char, int, long)
- •2.4.2. Логический тип Boolean
- •2.4.3. Вещественные типы (float и double)
- •2.5. Ссылочные типы
- •2.6. Выражения и операторы
- •2.6.1. Логические операторы
- •2.6.2. Целочисленные битовые операторы
- •2.6.3. Арифметические операторы
- •2.6.4. Приоритеты выполнения операторов
- •2.6.5. Преобразование типов
- •2.6.6. Оболочечные классы
- •2.7. Класс Math
- •2.8. Сложные типы данных и строки
- •2.8.1. Массивы
- •2.8.2. Строки
- •2.9. Управляющие конструкции
- •2.9.1. Составной оператор
- •2.9.2. Условный оператор if
- •2.9.3. Оператор выбора
- •2.9.4. Операторы цикла
- •2.9.5. Операторы перехода
- •Глава 3. Введение в ООП
- •3.1. Основные принципы ООП
- •3.2. Состав структура и основные свойства классов
- •3.2.1. Описание полей класса
- •3.2.2. Оператор new
- •3.2.3. Описание методов
- •3.2.4. Модификаторы
- •3.2.5. Конструкторы
- •Совмещение методов
- •Глава 4. Рефакторинг
- •Глава 5. Ввод и вывод в Java
- •Глава 6. Графический интерфейс пользователя GUI
- •6.1. Компоненты и контейнеры
- •6.2. Встроенные пакеты GUI классов на основе библиотеки awt
- •6.2.1. Метка Label
- •6.2.2. Кнопка Button
- •6.2.3. Кнопка выбора CheckBox
- •6.2.4. Радио-кнопка Radiobutton
- •6.2.5. Поле ввода TextField
- •6.2.6. Поле ввода TextArea
- •6.3. Использование визуального редактора для проектирования ГИП
- •6.4. Графика в Java
- •6.5. Обработка событий
Конструкторов в классе может быть несколько, и поскольку все они имеют одинаковые имена (имена класса), то должны различаться типом или количеством параметров.
Создать экземпляр класса можно используя зарезервированное слово new. Оно используется для выделения памяти объектам и массивам.
TenthGrade A = new TenthGrade();
TenthGrade B = new TenthGrade();
В данном примере представлено создание двух экземпляров класса TenthGrade (Десятые классы). В качестве операнда new указывается конструктор TenthGrade(). В результате создается две ссылки A и B на созданные объекты, то есть на объекты класса TenthGrade. Можно непосредственно использовать операнд new:
New TenthGrade().homework();
Здесь создается безымянный объект класса TenthGrade и сразу же после его создания выполняется метод homework().
Совмещение методов
Язык Java позволяет создавать несколько методов с одинаковы ми именами но различным списком параметров. Такая техника называется совмещением методов (method overloading). Рассмотрим на примере класса Point, в котором совмещение методов используется для определения альтернативного конструктора, который инициализирует координаты точки по умолчанию — 0.
class Point{ int a,b;
Point(int a, int b){ this.a=a; this.b=b;
}
Point(){
a=0;
b=0;
}
class MPoins{
public static void main(string[] args){ Point p1 = new Point();
Point p2 = new Point(10,23);
System.out.println(“Коорд. 1 точки x=” + p1.x «y=» + p1.y); System.out.println(“Коорд. 2 точки x=” + p2.x «y=» + p2.y);
}
}
Решение о том, какой конструктор нужно вызвать в том или ином случае, принимается в соответствии с количеством и типом параметров указанных оператором new. Недопустимо в классе использовать методы с
одинаковыми параметрами и сигнатурами. В сигнатуре метода не учитывается имена прараметров, а только их тип и количество.
Ссылка this
Рассмотрим пример с использованием ссылки this во втором методе. В этом случае второй конструктор Point() для завершения инициализации объекта возращается к первому конструктору Point(int a, int b).
class Point{ int a,b;
Point(int a, int b){ this.a=a; this.b=b;
}
Point(){
this(0,0);
}
class MPoins{
public static void main(string[] args){ Point p1 = new Point(10,23);
Point p2 = new Point();
System.out.println(“Коорд. 1 точки x=” + p1.x «y=» + p1.y); System.out.println(“Коорд. 2 точки x=” + p2.x «y=» + p2.y);
}
}
Наследование
Одним из фундаментальных принципов объектно-ориентирован- ного программирования является наследование. Классы потомки имеют возможность не только создавать свои собственные переменные и методы, но и наследовать переменные и методы классов-предков. Непосредственного или прямого предка для выбранного класса мы будем называть суперклассом.
Пример. Путем применения механизма наследования расширяем класс Point c двухмерного до трехмерного (имеет 3-координаты).
class Point3 extends Point{ int c,
Point3(int a, int b, int c){ this.a=a;
this.b=b;
this.c=c;
}
Point3(){
this(0,0,0);
}
}
Ключевое слово extends в рассматриваемом примере выше используется для того, чтобы сообщить транслятору о номерении
создать подкласс класса Point. В классе Point3 нет необходимости создавать две переменные координаты, так как он их наследует от класса Point.
Ссылка super
В примере из предыдущего пункта в классе Point3 частично повторяется код уже имеющийся в его суперклассе. Во втором конструкторе мы использовали ключевое слово this для обращения к первому конструктору того же класса. Ключевое слово super позволяет обратиться к конструктору суперкласса и провести анологичные действия.
Пример. Использование ключевого слова super. class Point3 extends Point{
int c,
Point3(int a, int b, int c){ super(a,b)
this.c=c;
}
public static void main(string[] args){ Point3 p1 = new Point3(10,23,71);
System.out.println(“Коорд. точки x=” + p1.a + «y=» + p1.b + «z=» + p1.c);
}
}
Замещение методов
Рассмотрим подкласс Point3 класса Point, который будет наследовать реализацию метода distan своего суперкласса. В классе Point определен метод distan, который возращает расстояние на плоскости между двумя точками. Поскольку в подклассе Point3 мы переходим к рассмотрению трехмерного случая то необходимо заместить (override, англ. overriding - замещение) это определение новым. В примере так же показано и совмещение(overloading) метода distan.
Пример. class Point{
int a,b;
Point(int a, int b){ this.a=a; this.b=b;
}
double distan(int a, int b){ int da=this.a-a;
int db=this.b-b;
return Math.sqrt(da*da+db*db);
}
double distan(point p){ return distan(p.a, p.b);
}
class Point3 extends Point{ int c,
Point3(int a, int b, int c){ super(a,b)
this.c=c;
double distan(int a, int b, int c){ int da=this.a-a;
int db=this.b-b; int dc=this.c-c;
return Math.sqrt(da*da+db*db+dc*dc);
}
double distan(Point3 p){
return distan(p.a, p.b, p.c);
}
double distan(int a, int b){ int da=(this.a/c)-a; int db=(this.b/c)-b;
return Math.sqrt(da*da+db*db);
}
}
public static void main(string[] args){ Point3 p1 = new Point3(10,23,71);
System.out.println(“Коорд. точки x=” + p1.a + «y=» + p1.b + «z=» + p1.c);
}
}
Class Point3distan()
public static void main(string[] args){ Point3 p1 = new Point3(10,23,71); Point3 p2 = new Point3(0,0,0);
Point3 p3 = new Point(3,7);
System.out.println(“Коорд.1 точки x=” + p1.a + «y=» + p1.b + «z=» + p1.c);
System.out.println(“Коорд.2 точки x=” + p2.a + «y=» + p2.b + «z=» + p2.c);
System.out.println(“Коорд.3 точки x=” + p3.a + «y=» + p3.b); System.out.println(“p1.distan(p2)=” p1.distan(p2)); System.out.println(“p1.distan(4,6)=” p1.distan(4,6)); System.out.println(“p1.distan(p)=” p1.distan(p));
}
}
Таким образом мы получим расстояние между парой трехменых точек и два расстояния между точками на плоскости. В примере
используется механизм — динамическое назначение методов (dynamic method dispatch).
Динамическое назначение методов
В качестве примера рассмотрим два класса, у которых имеется простое родство типа подкласс/cуперкласс. Единственный метод суперкласса замещен в подклассе.
Class A { void callme()
System.out.println(“Вызван метод callme класса A»);
}
}
Class B extends A { void callme()
System.out.println(“Вызван метод callme класса B»);
}
}
Class Dispatch {
public static void main(string[] args){ A a = new B();
a.callme();
}
}
Рассмотренная форма динамического полиморфизма времени выполнения представляет один из наиболее мощных механизмов объектно-ориентированного программирования, позволяющих писать надежный, многократно используемый код.
Директива final Диструкторы Статистические методы Абстрактные классы
