一文详解Java中内部类总结 收藏 阅读:212
2020-04-11 21:12:56

分为成员内部类、局部内部类、匿名内部类和静态内部类

1. 成员内部类

    和成员变量类似,拥有private、protected、public权限和包访问权限。

编译后,产生Outter$Inner.class和Outer.class文件。在编译后,内部类有个指向外部类的引用,默认有个构造器赋初值。

2. 局部内部类

    局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。

    为什么局部内部类和匿名内部类只能访问局部final变量?

    当外部类方法执行完毕后,局部变量生命周期就结束了,而匿名或局部内部类生命周还没有结束,所以不能访问没有final修饰的变量。Final修饰的局部变量,java采用复制手段,在匿名内部类(局部内部类)的常量池中添加一个内容相等的字面量或直接将相应的字节码嵌入到执行字节码中。这样一来,匿名内部类使用的变量是另一个局部变量,只不过值和方法中局部变量的值相等,因此和方法中的局部变量完全独立开。

3. 匿名内部类

    必须继承一个父类或实现一个接口

4. 静态内部类

    不能使用外部类的非static成员变量或者方法。和外部类只是在一个class定义里,其他没有关系,可以new出来,放在堆内存中。静态内部类与普通内部类的区别在于,静态内部类的对象是不指向与某个具体的外部类对象,所以在创建对象时不需要创建外部类对象。并且在new的时候是通过 new Parent.Inner()方式,而不是Parent.new Inner()。


读后有收获,请打赏。更多精彩内容,请关注微信公众号。有疑问请加QQ交流群:454792501


全部评论

发表评论