java内部类实现多重继承,内部类为什么必须引用final局部变量

java内部类实现多重继承

java中没有C++中的多重继承,但是可以通过内部类来实现。如: 内部类A继承了类B同时又作为C类的内部类,则“实现”了,A类对B、C类的多重继承。 但这在内存空间分配上存在一定隐患,尽量避免这么搞
内部类为什么必须引用final局部变量

在方法中创建内部匿名类时,一般是作为callback接口的实现而创建的,可能方法已经执行完了局部变量生命周期结束了,之后如果callback触发了,就可能引起变量引用丢失等内存访问不一致。

而加上final后,编译器是这样处理内部类的。如果这个外部局部变量是常量,则在内部类代码中直接用这个常量。如果是类的实例,则编译器将产生一个内部类的构造参数,将这个final变量传到内部类里,这样即使外部局部变量无效了,还可以使用。

内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。
这样理解就很容易得出为什么要用final了,因为两者从外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影响到原参 数,然而这样却失去了参数的一致性,因为从编程人员的角度来看他们是同一个东西,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时 候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是 final来规避这种莫名其妙错误的存在。


本文转载自:http://www.tidux.com/?p=232

 

你可能感兴趣的:(java)