Страницы

Поиск по вопросам

вторник, 26 ноября 2019 г.

Создание экземпляра интерфейса


Недавно наткнулся на странный вид создания экземпляра интерфейса. Я знаю,что создават
экземпляры абстрактных классов и интерфейсов нельзя, но данная запись выглядит как-то странно.

Вопрос заключается в следующем: как можно охарактеризовать данную запись?

public class TestApp {

    public static  void main(String[] args) {

        Animal animal = new Animal() {
            //?
            @Override
            public void say() {
            System.out.println("i am animal");
        }
    };

}


public interface Animal {

    void say();

}

    


Ответы

Ответ 1



Это - конструкция создания экземпляра анонимного класса. Она создаёт класс, унаследованны от класса/интерфейса Animal. Экземпляры абстрактных классов и интерфейсов создавать, действительно, нельзя, но в данном случае анонимный класс (пере)определяет метод say и класс перестаёт быть абстрактным. Фактически, данный код Animal animal = new Animal() { @Override public void say() { System.out.println("i am animal"); } }; эквивалентен следующему: class AnonAnimal implements Animal { @Override public void say() { System.out.println("i am animal"); } }; Animal animal = new AnonAnimal();

Комментариев нет:

Отправить комментарий