正常情况下,不能在接口放置任何代码,但嵌套类可以作为接口的一部分,你放到接口中的任何类都自动地是public和static.因为类是static的,只是将嵌套置于接口的命名空间内,这并不违反接口的规则,你甚至可以在内部类中实现其外围接口
//在CMD下运行编译后的文件 :java ClassInInterface$Test 在unix下要必须转义$ :Java ClassInInterface$Test
//: innerclasses/ClassInInterface.java // {main: ClassInInterface$Test} package object; public interface ClassInInterface { void howdy(); class Test implements ClassInInterface { //如果不能编译可以在这加static public void howdy() { System.out.println("Howdy!"); } public static void main(String[] args) { new Test().howdy(); } } } /* Output: Howdy! *///:~
如果你需要创建某些公共代码,使得它么可以被某个接口的所有不同实现所共用,那么使用接口内部的嵌套类会显得很方便
有时在每个类中都写一个main()方法,用来测试这个类,这样做有一个缺点,那就是必须带着那些编译过的额外代码,使用嵌套类放置内部代码,可以很方便
//TestBed编译后生成两个.class文件 TestBed$Tester.class和TestBed.class
//可以用TestBed$Tester.class类来做测试,但不必再发布产品中包含它,再将产品打包前删除TestBed$Tester.class
//: innerclasses/TestBed.java // Putting test code in a nested class. // {main: TestBed$Tester} package object; 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(); } } } /* Output: f() *///:~