Java - интерфейс, создав интерфейс?
Так я только что нашел этот пример кода в интернете некоторое время назад и я снова, но совсем запутался.
глядя на него, я понимаю (и это может быть неправильно), что он переходит к методу печати в классе NumberPrinter объекта принтера. Однако интерфейс также называется принтером, поэтому мы не создаем экземпляр анонимного класса интерфейса принтера, определяя методы и передавая его?
мой основной вопрос: Является ли мое первоначальное предположение правильно? И если это так, я думал, что вы не можете создать экземпляр интерфейса?
public class NumberPrinter {
public interface Printer {
public void print (int idx);
}
public static void print (Printer p) {
for (int i = 0; i < 4; i++) {
p.print(i);
}
}
public static void main(String[] args) {
print(new Printer() {
@Override
public void print(int idx) {
System.out.println(idx);
}
});
}
}
3 ответов
Это называется анонимный внутренний класс.
он создает неименованный класс, который реализует Printer
интерфейс.
ваше предположение верно, и вы не можете создать экземпляр интерфейса. Однако вы можете создать экземпляр анонимного класса, что и делает код.
вам нужен объект принтера для функции печати NumberPrinter. Когда вы вызываете эту функцию, вы фактически не создаете экземпляр интерфейса принтера, но создаете экземпляр его реализации, и именно поэтому он работает.
кстати, ваше предположение было правильным.