Существует абстрактный класс:
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 и почему я могу создать экземпляр этого класса?
Вы не создаете экземпляр класса Drink
. Конструкция
new Drink()
{
@Override
public void taste()
{
super.taste();
}
}
Определяет анонимный подкласс класса Drink
с переопределенным методом taste
и создает экземпляр этого подкласса. Т.к. базовый класс только объявлен абстрактным, но не содержит абстрактных методов, то его наследников вполне можно создавать. Более того, т.к. в этом подклассе переопределяется только один метод, который, по сути, просто вызывает метод родителя, то можно написать и так
public static Drink getDeliciousDrink() {
return new Drink(){};
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте, начинаю изучать java по книге Head First - Javaпонимаю что вопрос наверно детский, но у меня вылетает эта ошибка, и я не знаю в чём проблема,...
Допустим, у нас приложение для просмотра заметок с использованием фрагментов и RecyclerViewЗаметки хранятся в БД
Добрый день, есть образец экзаменационного задания по программированию на JavaМожно ли получить совет, с чего начинать и в каком направлении...
Имеется xml с множеством элементовНекоторые элементы имеют одинаковое название но дочерние элементы могу отличаться