//在域中的类classOutter{publicvoidf(boolean b){if(b){classInner{}}
Inner in =newInner();//在域中创建的内部类不能在域外访问}
10.6 匿名内部类
publicclassOutter{public Contents contents(int x){//将返回值与类的定义绑定在一起returnnewContents(x){//传递构造器参数privateint i =1;};//这个;表示 return 这个语句的结束}}//Contents 是一个接口,这里创建的是一个匿名的Contents类的实现类的对象
内部类作为接口的实现类
interfaceService{publicvoidmethod1();publicvoidmethod2();}//制造不同Service对象的工厂interfaceServiceFactory{
Service getService();}classImplementation1implementsService{privateImplementation1(){}publicvoidmethod1(){}publicvoidmethod2(){}publicstatic ServiceFactory factory =newServiceFactory(){public Service ServiceFactory(){returnnewImplementation1();}}}}classImplementation2implementsService{privateImplementation2(){}publicvoidmethod1(){}publicvoidmethod2(){}publicstatic ServiceFactory factory =newServiceFactory(){//接口的一个实现,内部类public Service ServiceFactory(){returnnewImplementation2();}}}}
pubic classFactories{publicstaticvoidserviceConsumer(ServiceFactory fact){
Service s = fact.getService();
s.method1();
s.method2();}publicstaticvoidmain(String[] args){serviceConsumer(Implementation1.factory);serviceConsumer(Implementation2.factory);}}
publicclassGreenHouseControlsextendsController{privateboolean light =false;publicclassLightOnextendsEvent{publicLightOn(long delayTime){super(delayTime);}publicvoidaction(){
light =true;}}publicclassLightOffextendsEvent{publicLightOff(long delayTime){super(delayTime);}publicvoidaction(){
light =false;}}privateboolean water =false;publicclassWaterOnextendsEvent{publicWaterOn(long delayTime){super(delayTime);}publicvoidaction(){
water =true;}}publicclassWaterOffextendsEvent{publicWaterOff(long delayTime){super(delayTime);}publicvoidaction(){
water =false;}}}
10.9 内部类的继承
内部类继承类必须初始化外部类,调用外部类构造器,这一语句应在内部类继承类中显式调用
classOutter{classInner{}}publicclassInheritInnerextendsOutter.Inner{InheritInner(Outter wi){
wi.super();//必须要有这个初始化,否则无法编译}publicstaticvoidmain(String[] args){
Outter wi =newOutter();
InheritInner ii =newInheritInner(wi);}}
10.10 内部类可以被覆盖吗
classEgg{private Yolk y;protectedclassYolk{publicYolk(){ System.out.println("Egg.Yolk()");}}publicEgg(){
System.out.println("new Egg()");
y =newYolk();}}publicclassBigEggextendsEgg{publicclassYolk{publicYolk(){ System.out.println("BigEgg.Yolk()");}//并不会调用这个版本的构造器,因为两个 Yolk 类本质上是两个独立的类,没有关联}publicstaticvoidmain(String[] args){newBigEgg();}}/*
new Egg()
Egg.Yolk()
*/
10.1 创建内部类public class Parcel2 { class Contents {} class Destination {} public Destination to() { return new Destination(); } public Contents contents() { return new Contents(); } public static void main(String[] args) { Parcel2 p = new Parce