Java基础加强-内部类及代理

/*内部类是一个编译时的概念,*/

常规内部类、静态内部类、局部内部类、匿名内部类
1.常规内部类(常规内部类没有static修饰且定义在外部类类体中)
  1.常规内部类中的方法可以直接使用外部类的实例对象和实例方法
  2.在常规内部类中可以直接用内部类创建对象

2.静态内部类(与类的其他成员相似,可以用static修饰内部类,这样的类称为静态内部类。)
  1.静态内部类与静态内部方法相似,只能访问外部类的static成员,不能直接访问外部类的实例变量,与实例方法,只有通过对象引用才能访问
  2.由于static内部类不具有任何对外部类实例的引用,因此static内部类中不能使用this关键字来访问外部类中的实例成员,

3.局部内部类 (在方法体或语句块)内部定义的类成为局部内部类
  1.局部内部类只在方法体中有效,就像定义局部变量一样,在定义的方法外不能创建局部内部类的对象
  2.不能使用private protected public 等修饰符,也不能使用static修饰 ,但可以使用final和 abstract修饰
  3.方法中的内部类可以访问外部类成员。对于方法的参数和局部变量,必须有final修饰才可以访问

  4.static 方法中定义的内部类可以访问外部类定义的static成员


4.匿名内部类(定义类的最终目的是创建一个类的实例,但是如果某个类的实例只是用一次,则可以将类的定义与类的创建,放到一起完成,或者说定义类的同时,就创建一个类)
  1.匿名内部类可以继承一个类或实现一个接口,但是匿名内部类不能同时实现一个接口和继承一个类,也不能实现多个接口。
  2.由于匿名内部类没有名称,所以在类体中不能定义构造方法,也不能使用关键字来创建该类的实例,一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类


为什么要使用内部类:
  1.内部类提供接入其外围类的绿色通道
  2.一般来说,内部类继承自某个类或实现某个接口,和接口一起实现java中的多重继承
  3.private 内部类给类的设计者提供了一种途径,通过这种方式可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节
  4.匿名内部类可以使得代码更加灵活

/*代理*/:
  静态代理:只服务于一种类型的对象,如果要为多类型的对象服务,就要为每一种对象进行代理

  动态代理:假如想干三件事(相当于三段代码)安排好后以后你如果想调换顺序,换做以前,你必须去代码里进行改动,
  改动代码意味着你要重新测试,而如果你用动态代理就不会,把每件事看做一个方面,每个方面是织入的,改变顺序不影响整体

/*桥方法*/
  Java中的桥方法 是 合成方法,合成方法对于实现Java语言特征是必需的。
  最广为人知的例子就是协变返回类型和泛型中的案例,在泛型中案例基方法的方法的参数被擦除后与实际被调用的方法不同是会用到桥方法

原文地址:https://www.cnblogs.com/xuzekun/p/7354709.html