Конструкторы классов
Конструктор – это особенный метод класса, который вызывается автоматически в момент создания объектов этого класса. Имя конструктора совпадает с именем класса.
Например, в классе Dog может быть конструктор с двумя параметрами, который при создании новой собаки позволяет сразу задать ее кличку и возраст.
public Dog(String n, int a) {
name = n;
age = a;
}
Конструктор вызывается после ключевого слова new в момент создания объекта. Теперь, когда у нас есть такой конструктор, мы можем им воспользоваться:
Dog dog1 = new Dog("Тузик", 2);
В результате переменная dog1 будет указывать на «собаку» по кличке Тузик, имеющую возраст 2 года.Этот возраст можно узнать, заставив собаку лаять командой
dog1.voice();
Конструкторы добавляются в класс, если в момент создания объекта нужно выполнить какие-то действия (начальную настройку) с его данными (полями). Сразу задать кличку и возраст собаки более естественно, чем каждый раз порождать безымянного щенка, а затем давать ему имя и быстро выращивать до нужного возраста (с учетом того, что программа скорее всего обрабатывает данные о собаках, которые на самом деле уже давно родились).
Наследование
Наследование – это отношение между классами, при котором один класс расширяет функциональность другого. Это значит, что он автоматически перенимает все его поля и методы, а также добавляет некоторые свои.
Наследование обычно возникает, когда все объекты одного класса одновременно являются объектами другого класса (отношение общее/частное). Например, все объекты класса Студент являются объектами класса Человек. В этом случае говорят, что класс Студент наследует от класса Человек. Аналогично класс Собака может наследовать от класса Животное, а класс Далматинец от класса Собака. Класс, который наследует, называется подклассом или потомком, а класс, от которого наследуют, называется суперклассом или предком.
Заметим, что если класс №2 является потомком класса №1, а класс №3 является потомком класса №2, то класс №3 является также потомком класса №1.
Наследование избавляет программиста от лишней работы. Например, если в программе необходимо ввести новый класс Далматинец, его можно создать на основе уже существующего класса Собака, не программируя заново все поля и методы, а лишь добавив те, которых не хватало в суперклассе.
Для того, чтобы один класс был потомком другого, необходимо при его объявлении после имени класса указать ключевое слово extends и название суперкласса.
Например:
class Dalmatian extends Dog {
// дополнительные поля и методы...
}
Если ключевое слово extends не указано, считается, что класс унаследован от универсального класса Object.
С класса Object начинается иерархия наследования. Любой другой класс является потомком класса Object и наследует от него три метода:
equals(Object obj) – позволяет сравнивать два объекта. Возвращает true, если объекты равны. Например, мы сравнивали строки (объекты класса String):
if (s1.equals(s2)) { ... }
toString() – «переводит» объект в строку (которую можно вывести в методе println()).
hashCode() – возвращает целое число, уникальное для всех объектов данного класса (не может быть двух объектов, для которых это число совпадает).
При наследовании эти методы чаще всего необходимо переопределить, чтобы они работали так, как надо программисту. Подробнее о переопределении см. далее.
Дата добавления: 2017-01-26; просмотров: 1297;