Вопрос по абстрактным классам

549
04 января 2017, 01:48

Существует абстрактный класс:

public abstract class Drink
{
    public void taste(){
        System.out.println("Вкусно");
    }
}

По идее создавать его экземпляры запрещено, но IDE помог обойти этот запрет следующим способом:

public static Drink getDeliciousDrink() {
        return new Drink()
        {
            @Override
            public void taste()
            {
                super.taste();
            }
        };
    }

Что происходит при переопределении функции taste и почему я могу создать экземпляр этого класса?

Answer 1

Вы не создаете экземпляр класса Drink. Конструкция

new Drink()
{
    @Override
    public void taste()
    {
        super.taste();
    }
}

Определяет анонимный подкласс класса Drink с переопределенным методом tasteи создает экземпляр этого подкласса. Т.к. базовый класс только объявлен абстрактным, но не содержит абстрактных методов, то его наследников вполне можно создавать. Более того, т.к. в этом подклассе переопределяется только один метод, который, по сути, просто вызывает метод родителя, то можно написать и так

public static Drink getDeliciousDrink() {
    return new Drink(){};
}
READ ALSO
Ошибка reached end of file while parsing }

Ошибка reached end of file while parsing }

Здравствуйте, начинаю изучать java по книге Head First - Javaпонимаю что вопрос наверно детский, но у меня вылетает эта ошибка, и я не знаю в чём проблема,...

676
Избежать повторной инициализации activity в onResume

Избежать повторной инициализации activity в onResume

Допустим, у нас приложение для просмотра заметок с использованием фрагментов и RecyclerViewЗаметки хранятся в БД

483
Экзаменационное задание по программированию на Java [требует правки]

Экзаменационное задание по программированию на Java [требует правки]

Добрый день, есть образец экзаменационного задания по программированию на JavaМожно ли получить совет, с чего начинать и в каком направлении...

455
Обращение к определенному тегу xml

Обращение к определенному тегу xml

Имеется xml с множеством элементовНекоторые элементы имеют одинаковое название но дочерние элементы могу отличаться

468