Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvOpAbIh 61 of 147 menu
◀ ▶

Наследование от абстрактного класса в Java

Конкретный класс наследует абстрактный через extends и обязан реализовать все абстрактные методы родителя. После этого объект потомка можно хранить в переменной типа родителя - так связывают разные реализации одним именем типа.

Запись и страница наследуют Content. Ссылки типа Content могут указывать на разные потомки:

abstract class Content { protected String title; public Content(String title) { this.title = title; } public abstract String render(); } class Post extends Content { private String text; public Post(String title, String text) { super(title); this.text = text; } @Override public String render() { return "post " + title; } } class Page extends Content { public Page(String title) { super(title); } @Override public String render() { return "page " + title; } }

В методе main положим в массив ссылки на базовый тип и вызовем render у каждого элемента:

public class Main { public static void main(String[] args) { Content[] items = { new Post("news", "hello"), new Page("about") }; for (Content item : items) { System.out.println(item.render()); } } }

Java выбирает реализацию метода по фактическому типу объекта, хотя переменная объявлена как Content. Создать элемент массива через new Content(...) по-прежнему нельзя - нужен конкретный класс-потомок.

Создайте массив User[] (абстрактный User с методом getLabel), положите в него объекты Employee и Student и выведите метки всех элементов в цикле.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить