Java 中的内部类 (2)

类 Parce1 中的 destination() 方法直接 new 了一个 Destination 对象,重写该 readLabel() 方法。 这样返回没有名字的局部内部类类,称为匿名内部类。

局部内部类 VS 匿名内部类

在使用局部内部类或着匿名内部类的时候,要使用外部类中的局部变量是,该变量要为final ,要问为为什么,因为局部内部类或着匿名内部类内部对局部变量操作并不会改变改内容,所以为了防止使用错误。就用final修饰。不可变。其根本原因就是不会有任何的变化。
那么什么时候用局部内部类,什么时候用匿名内部类?
在你需要一个已命名的构造器,或着需要重构构造器。需要的不止是该一个内部类对象。就是你要定义多个构造器的时候用局部内部类。如果不需要就用匿名内部类。
JAVA 8 可以用Lambda 表达式表示
上面 Parcel1 类 用 JAVA 8 编码如下

public class Parcel2 { public Destination destination(final String str) { return ()->{ String label = str; return label; }; } public static void main(String[] args) { Parcel2 parcel2 = new Parcel2(); Destination ouyangkang = parcel2.destination("hello"); System.out.println(ouyangkang.readLabel()); } }

输出:hello

嵌套类

如果把A类定义在B类中,并A类用static关键字修饰,那么把A叫做嵌套类。
代码如下:

publc class B{ static class A{} }

如果不需要内部类和外部类有关系,就把该内部类声明为 static 。
创建嵌套类代表:

并不需要外围类对象

不能从嵌套类的对象中访问外部类中的 非静态的东西。

我一般用嵌套类来做测试类。嵌套类理解就到此为止了

总结

总的来说,Java 中的 内部类并没有想象的的那么难理解和认知,但是内部类使用起来就比较深奥了,其中多态这一特性在,配合着内部类,可谓说贼强了。隐藏细节,关注接口中方法本身的意思。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgpdw.html