Создание «объекта» интерфейса - PullRequest
0 голосов
/ 28 сентября 2011

Сегодня у меня был небольшой спор с другом, который утверждал, что объект интерфейса может быть создан.Когда я сказал, что это невозможно, он показал мне следующий фрагмент кода, который казался похожим на анонимные классы. Теперь вопрос в том, каков правильный ответ?

public interface I {
    public void f();
}

public class InterfaceTest {
    public static void main(String []args){
        new I(){
            @Override
            public void f() {
                System.out.println("HELLO");                
            }           
        };
    }
}

Можно ли это действительно назвать созданием интерфейса"объект"?

Ответы [ 3 ]

2 голосов
/ 28 сентября 2011

Нет, это создание экземпляра анонимного класса, который реализует интерфейс.

Вот окончательный ответ из Спецификации языка Java, раздел 15.9 :

Как неквалифицированные, так и квалифицированные выражения создания экземпляров класса могут необязательно заканчиваться телом класса.Такое выражение создания экземпляра класса объявляет анонимный класс (§15.9.5) и создает его экземпляр.

2 голосов
/ 28 сентября 2011

Нет, это ( экземпляр из) анонимный класс.

0 голосов
/ 28 сентября 2011

Это создание анонимного класса. Созданный выше класс экземпляра расширяет java.lang.Object и реализует интерфейс I. Таким образом, технически вышеприведенный код создает объект Object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...