Java - Interface, instantiating an interface?

夙愿已清 提交于 2019-11-27 06:58:08

问题


So I just found this code example online a while ago and I'm going over it again but quite confused.

From looking at it, what I gather (and it might be wrong) is that it passes to the print method in the NumberPrinter class a Printer object. However, the interface is also called Printer, so aren't we instantiating an anonymous class of the Printer interface, defining the methods and then passing it?

My basic question is, is my initial assumption correct? And if so I thought you could not instantiate an interface?

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);
            }

        });
    }

}

回答1:


This is called an anonymous inner class.

It creates an un-named class that implements the Printer interface.




回答2:


Your assumption is correct, and you cannot instantiate an interface. You can instantiate an anonymous class however, which is what the code is doing.




回答3:


You need a Printer object for the print function of NumberPrinter. When you call that function you don't actually instantiate the Printer interface but you instantiate an implementation of it and this is why it's working.

Your assumption was correct by the way.



来源:https://stackoverflow.com/questions/10201081/java-interface-instantiating-an-interface

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!