sheng的学习笔记-内部类

内部类分类

 内部类和外部类会生成2个class文件,其中内部类是  Outer$Inner.class形式

成员内部类

内部类可以声明static final的变量,但不可以声明static变量

可以用new Outer.new Inner方式创建对象,必须得先new外部类,再通过外部类new内部类,内部类的对象归属外部类对象

 

静态内部类

只有内部类可以用静态方法修饰,外部类用static会报错

静态内部类与非静态内部类之间的比较:

 比如在外围类 Outer 中分别定义了一个私有、非静态属性 i,与一个私有、静态属性 j。那么静态内部类 Inner 只能访问 私有、静态属性 j

想在内部类访问外部类的非静态成员变量,要通过  new 外部类.成员变量   的方式

 

局部内部类

局部内部类:注意不能加任何访问修饰符。就跟局部变量不能加public/private等一样

 内部类的有效范围只在这个方法内部,想要访问局部变量,必须是final的,否则报错

这是因为age是函数show的局部变量,在show结束后,age作为局部变量也会消失,但Inner的对象不会立刻被回收,如果此时引用了已经消失的age就有问题了。所以此时age应该是一个常量,在Inner内部引用的是一个常量,不会因show函数执行完而引用一个消失的对象

匿名内部类

先搞个接口

实际上就是创建了一个局部内部类,只是局部内部类的名字不是我们定义的,是系统定义的,这种跟下面的局部内部类伪代码没啥区别,但匿名内部类使用更多。下面的interface可以是接口,抽象类,父类等

等同于的伪代码

main function(){

       Interface interface = new 局部内部类 implements Interface{

                @Override

                service(){  do something  }

        }

        interface.service();

}

 匿名内部类会生成一个  MyInterface$1.class 的文件,所以名字不是我们定义的,但会有

 

 参考文章:

12.06 局部内部类_哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值