Конструктор абстрактного класса в Java
Абстрактный класс может иметь конструктор с параметрами. Общие
данные инициализируют в родителе, а потомок передаёт значения
через super(...) в своём конструкторе.
Заголовок материала зададим в конструкторе абстрактного
Content:
abstract class Content {
protected String title;
public Content(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public abstract String render();
}
Класс Post принимает заголовок и текст, заголовок
передаёт в конструктор родителя:
class Post extends Content {
private String text;
public Post(String title, String text) {
super(title);
this.text = text;
}
@Override
public String render() {
return title + ": " + text;
}
}
При создании объекта вызывается цепочка конструкторов - сначала
родитель получает title, затем инициализируется поле
потомка:
Post post = new Post("news", "hello");
System.out.println(post.getTitle());
System.out.println(post.render());
В абстрактном классе допустим блок инициализации экземпляра - он выполнится при создании любого конкретного потомка после вызова конструктора родителя:
abstract class Content {
protected String title;
public Content(String title) {
if (title.isEmpty()) {
throw new IllegalArgumentException("title is empty");
}
this.title = title;
}
public abstract String render();
}
Сделайте абстрактный класс User
с конструктором, принимающим имя пользователя.
Сделайте класс Employee с конструктором,
принимающим имя и зарплату, и передайте имя
в конструктор родительского класса.
Сделайте класс Student с конструктором,
принимающим имя и стипендию. Передайте имя
в конструктор родительского класса и напишите
реализацию абстрактного метода
increaseRevenue.