Java为何支持通过带重写方法的匿名类实现接口实例化?
接口的"实例化"真相:匿名类的作用
在Java里,接口是抽象结构,本身没法直接实例化——它只定义方法签名作为契约,没有具体方法体。通常接口要么被具体类实现,要么被其他接口继承。
但接触匿名类后会发现,用它的语法似乎能直接"实例化"接口,本质是匿名类即时提供了接口方法的实现,并非真的实例化接口本身。
示例代码
interface Greeter { void greet(); } public class HelloWorld { public static void main(String[] args) { Greeter greeter = new Greeter() { @Override public void greet() { System.out.println("Hello, world!"); } }; greeter.greet(); } }
代码说明
上述代码里,Greeter是仅含greet方法的接口。main方法中,我们并没有直接实例化Greeter接口,而是创建了一个实现了Greeter接口的匿名内部类,同时完成了这个类的实例化,并把实例赋值给Greeter类型的引用。
这里的new Greeter(){ ... }语法,是Java提供的语法糖,帮我们省略了显式定义一个实现类的步骤,直接在需要的地方写出接口的实现逻辑。
内容的提问来源于stack exchange,提问作者zaraterdz
相关产品推荐
相关产品推荐

