1. Объекты 1.1. Создание объектов Новый объект создается с помощью оператора new, например: Object obj = new Object(); Integer num = new Integer(5); String str = new String(“abc”); Базовым классом языка Java является специальный класс java.lang.Object. Любой объект можно привести к типу Object, например: Object objNum = (Object) num; Object objStr = (Object) str; 1.2. Время жизни объектов Виртуальная Java машина контролирует создание и уничтожение объектов. Каждый объект при создании размещается в области памяти Java машины. Локальная переменная существует в пределах программного блока, где она была объявлена. В программе можно создать сколько угодно переменных, ссылающихся на один объект. Объект удаляется из памяти, когда в программе не остается ссылок на этот объект. Процесс, который контролирует удаление объектов, называется сборщиком мусора (Garbage Collector) 1.3. Базовые методы объекта В языке Java все объекты являются наследниками класса java.lang.Object. Это значит, что каждому объекту доступны методы определенные в классе Object, например: toString() – метод возвращает строковое представление объекта equals() – метод сравнивает два объекта на эквивалентность getClass() – метод возвращает специальный класс для описания класса данного объекта Полное описание методов базового класса OIbject описано в помощи по Java API. 2. Массивы 2.1. Представление массивов Любой массив в Java является объектом. Новый массив создается с помощью оператора new. Размерность массива задается с помощью квадратных скобок. Длина массива доступна через переменную length. Элементы массива нумеруются от 0 до (length - 1). Для обращения к элементам массива используется оператор индекса [] Язык Java поддерживает массивы различной размерности. 2.2. Объявление массивов Пример объявлений массивов простых типов: byte[] arr0 = new byte[0]; int[] arr1 = new int[1]; foat arr2[] = new float[2]; double[][] arr3 = new double[3][3]; Пример объявлений массивов объектов: Object[] objects = new Object[1]; String[] args = new String[3]; java.util.Date dates[][]= new java.util.Date[1][1]; 1 3. Классы 3.1. Объявление класса Класс определяет поведение всех своих экземпляров (объектов). Для объявления нового класса используется ключевое слово class с указанием модификатора видимости. Пример объявления класса: public class Person { } 3.2. Поля и методы класса Класс определяет структуру данных и поведение всех своих потомков. Набор методов класса определяет поведение объекта. Набор полей класса определяет состояние объекта. Объект может содержать ссылки на другие объекта. Пример объявления класса: public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 3.3. Конструкторы класса Конструктор – это специальный метод класса, выполняемый в момент создания нового экземпляра класса - объекта. Конструкторы используются для определения данных объекта на этапе инициализации. Пример конструкторов для класса Person: public Person () { this(“неизвестный”); } public Person (String name) { this.name = name; } Можно создать экземпляр класса, используя специальный класс Class, например: Class.forName(“Person”).newInstane(); 4. Наследование классов 4.1. Наследование в Java От одного класса может быть порождено произвольное количество новых классов. В результате получается иерархия классов, порожденных один от другого. Ключевое слово extends может определять только один наследуемый класс, например: public class Employee extends Person { private int salary = 0; public Employee (String name, int salary) { 2 super(name); this.salary = salary; } public int getSalary() { return salary; } } 4.2. Ключевое слово super Ключевое слово super доступно только внутри нестатических методов класса. Ключевое слово super можно рассматривать как ссылку на предка. В конструкторе доступен метод super() для вызыва конструктора родительского объекта. Пример использования: public void setName(String name) { super.setName(name.toUpperCase()); } 4.3. Абстрактный класс Абстрактный класс может определять реализацию только для части своих методов. Объявленные, но не реализованные методы называются абстрактными и должны быть реализованы в классах потомках. Невозможно создать экземпляр абстрактного класса, так как его методы еще не реализованы (не определено поведение объекта). Возможно только создание его неабстрактных наследников. Пример абстрактного класса: public abstract class PremiumEmployee extends Employee{ public PremiumEmployee (String name, int salary) { super(name, salary); } public abstract int calculatePremium(); } 4.4. Интерфейс Интерфейс можно рассматривать как специализированный абстрактный класс, содержащий только абстрактные методы. Как и абстрактный класс, невозможно создать экземпляр интерфейса. Возможно только создание его неабстрактных реализаций. Интерфейс может содержать статические константы. Любой класс может реализовывать несколько интерфейсов. Ключевое слово implements задает набор реализуемых интерфейсов Пример интерфейса: public interface Man { Sting getName(); } Пример реализации: public class Person implements Man { private String name; public String getName() { return name; } 3 } 5. Упражнения 5.1. Иерархия классов В пакете /ru/nsu/ccfit/ФАМИЛИЯ/shape построить иерархию классов плоских фигур: прямоугольника (Rectangle), квадрата (Square) и круга (Circle). Базовый класс должен называться Shape и объявлять абстрактный метод getArea для подсчета площади фигуры. Схема наследования: Shape <- Rectangle <- Square Shape <- Circle Две фигуры считать одинаковыми, если у них совпадают площади. Для сравнения фигур необходимо использовать метод equals. В каждом классе-наследнике переопределить метод toString(), возвращающий строку с информацией, что это за фигура и какие у нее параметры. Для тестирования выполнить следующие задания: 1. Создать вспомогательный класс Shapes с двумя статическими методами: public static float getArea(List shapes); // возвращает сумму площадей public static List getEquals(List shapes); // возвращает одинаковые по площади 2. Создать выполняемый класс ShapeTest, в котором выполнить следующие действия: Создать список java.util.ArrayList для хранения объектов Добавить в список 10 прямоугольников с длинами и высотами от 1 до 10 Добавить в список 10 квадратов со стороной от 1 до 10 Добавить в список 10 кругов с радиусом от 1 до 10 С помощью класса Shapes высчитать общую площадь и распечатать информацию о фигурах с равными площадями (использовать метод toString) 5.2. Дополнительное задание Добавить в класс Shapes метод сортировки списка фигур. Реализация метода должна использовать метод sort вспомогательного класса java.util.Collections В тестовый класс ShapeTest добавить вывод на экран отсортированного списка (использовать метод toString) 4