На этом шаге мы рассмотрим пример собственного класса
Напишем класс, инкапсулирующий информацию о сотрудниках (Employee). У данного класса будут следующие поля:
Напишем ниже класс Employee.
import java.util.Date; import java.util.GregorianCalendar; public class Employee { private String name; /*Имя сотрудника*/ private double salary; /*Зарплата сотрудника*/ private Date hireDay; /*День начала работы*/ /*Первый конструктор*/ public Employee(String name, double salary, Date hireDay) { /*Инициализируем поля*/ this.name = name; this.salary = salary; this.hireDay = hireDay; } /*Второй конструктор*/ public Employee(String name, double salary, int year, int month, int day) { /*Инициализируем поля*/ this.name = name; this.salary = salary; GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day); this.hireDay = calendar.getTime(); } /*Функция для получения имени сотрудника*/ public String getName() { return name; } /*Функция для получения зарплаты сотрудника*/ public double getSalary() { return salary; } /*Функция для получения дня поступления на работу сотрудника*/ public Date getHireDay() { return hireDay; } /*Функция для увеличения зарплаты сотрудника на byPercent процентов*/ public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; this.salary += raise; } @Override public String toString() { return "name = " + name + ", salary = " + salary + ", hireDay = " + hireDay; } }
Опишем по порядку данный класс. В данном классе реализованы два конструктора. Каждый из них инициализирует поля данного класса. У любого метода класса есть один неявный параметр. Так, например, метод raiseSalary имеет два параметра. Первый параметр, называемый неявным, представляет собой ссылку на объект типа Employee. Второй параметр называется явным. Неявный параметр в объявлении метода не приводится. В каждом методе (в данном примере в каждом конструкторе) ключевое слово this обозначает неявный параметр.
В объявлении всех методов и конструкторов можно встретить ключевое слово public. Это слово необходимо для того, чтобы мы могли вызвать эти методы за пределами данного класса. Иными словами, данные методы являются публичными для всех классов. В тоже время у полей можно встретить ключевое слово private. Это слово говорит о том, что данные поля доступны только методам данного класса, то есть являются закрытыми для других классов. Если мы не хотели бы чтобы некоторый метод был доступен другим классам, то нужно использовать слово private.
Особое внимание вызывает метод toString. Этот метод всегда вызывается при преобразовании в тип String (более подробно о нем мы поговорим позднее). Например, такое преобразование будет происходить в следующей части программы:
for (Employee e : staff) {
System.out.println(e);
}
Для тестирования данного класса напишем тестовый класс EmployeeTest. Приведем его код ниже:
public class EmployeeTest { public static void main(String[] args) { /*Создадим для тестрования массив из трех сотрудников*/ Employee[] staff = new Employee[3]; /*Заполним массив разными данными*/ staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15); staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1); staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15); /*Увеличим зарплату каждого сотрудника на 5%*/ for (Employee e : staff) { e.raiseSalary(5); } /*Выведем информацию о каждом сотруднике*/ for (Employee e : staff) { System.out.println(e); } } }
Проект можно взять здесь.
Рис. 1. Результат выполения программы
На следующем шаге мы поговорим про неизменяемые поля экземпляра