本章知识点思维导图publicclassOuter2{privatestaticintx=100;publicstaticclassInner2{privateStringy=hello;publicvoidinnerMethod(){System.out.println(xis+x);//可以访问外层类的静态成员xSystem.out.println(yis+y);}}publicstaticvoidmain(String[]args){Outer2.Inner2snc=newOuter2.Inner2();snc.innerMethod();}}程序8-20Outer2.java在类的内部还可以定义内部接口,内部接口的隐含属性是static的,当然也可以指定。嵌套的类或接口可以有任何访问修饰符,如public、protected、private以及缺省。在内部类中还可以定义下一层的内部类,形成类的多层嵌套。内部接口定义类最终目的是创建一个类的实例,但如果某个类的实例只使用一次,可以将类的定义和实例的创建在一起完成,或者说在定义类的同时创建一个实例。以这种方式定义的没有名字的类称为匿名内部类(anonymousinnerclass)。8.7.3匿名内部类声明和构建匿名内部类的一般格式如下:newTypeName(){/*此处为类体*/}匿名内部类可以实现一个接口或继承一个类,这里TypeName是匿名内部类所实现的接口或继承的类。如果实现一个接口,该类是Object类的直接子类。匿名类继承一个类或实现一个接口不需要使用extends或implements关键字。匿名内部类不能同时继承一个类和实现一个接口,也不能实现多个接口。8.7.3匿名内部类由于匿名内部类没有名称,所以类体中不能定义构造方法。由于不知道类名,所以只能在定义类的同时用new关键字创建类的实例。实际上,匿名内部类的定义、创建对象发生在同一个地方。另外,上式是一个表达式,它返回一个对象的引用,所以可以直接使用或将其赋给一个引用变量。TypeNameobj=newTypeName(){/*此处为类体*/};8.7.3匿名内部类同样,也可以将构建的对象作为方法调用的参数。someMethod(newTypeName(){/*此处为类体*/});interfacePrintable{publicabstractvoidprint(Stringmessage);}publicclassPrintableTest{publicstaticvoidmain(String[]args){Printableprinter=newPrintable(){@Overridepublicvoidprint(Stringmessage){System.out.println(message);}};printer.print(这是惠普打印机);}}程序8-21PrintableTest.javaclassAnimal{publicvoideat(){System.out.println(Ilikeeatanything.);}}程序8-22AnimalTest.javapublicclassAnimalTest{publicstaticvoidmain(String[]args){Animaldog=newAnimal()