企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### [接口内部的类](https://lingcoder.gitee.io/onjava8/#/book/11-Inner-Classes?id=%e6%8e%a5%e5%8f%a3%e5%86%85%e9%83%a8%e7%9a%84%e7%b1%bb) 嵌套类可以作为接口的一部分。你放到接口中的任何类都自动地是**public**和**static**的。因为类是**static**的,只是将嵌套类置于接口的命名空间内,这并不违反接口的规则。你甚至可以在内部类中实现其外部接口,就像下面这样: ~~~ // innerclasses/ClassInInterface.java // {java ClassInInterface$Test} public interface ClassInInterface { void howdy(); class Test implements ClassInInterface { @Override public void howdy() { System.out.println("Howdy!"); } public static void main(String[] args) { new Test().howdy(); } } } ~~~ 输出为: ~~~ Howdy! ~~~ 如果你想要创建某些公共代码,使得它们可以被某个接口的所有不同实现所共用,那么使用接口内部的嵌套类会显得很方便。 我曾在本书中建议过,在每个类中都写一个`main()`方法,用来测试这个类。这样做有一个缺点,那就是必须带着那些已编译过的额外代码。如果这对你是个麻烦,那就可以使用嵌套类来放置测试代码。 ~~~ // innerclasses/TestBed.java // Putting test code in a nested class // {java TestBed$Tester} public class TestBed { public void f() { System.out.println("f()"); } public static class Tester { public static void main(String[] args) { TestBed t = new TestBed(); t.f(); } } } ~~~ 输出为: ~~~ f() ~~~ 这生成了一个独立的类**TestBed$Tester**(要运行这个程序,执行**java TestBed$Tester**,在 Unix/Linux 系统中需要转义**$\*\*)。你可以使用这个类测试,但是不必在发布的产品中包含它,可以在打包产品前删除 \*\*TestBed$Tester.class**。