学习内部类,作用,种类,场景,jdk更新的变化
1.内部类
1.1内部类定义
定义:
- 一个类定义在另外一个类中或另外一个类的方法中。内部类会继承某个类或某个接口。 内部类代码可以直接操作外部类的对象和成员变量。
内部类所提供的其实是针对外部类的某种功能。
优势:
- 1.内部类不受外部类是否继承某个类,是多重继承的完美解决方案,是对java单一继承的有益补充。
2.内部类可以有多份实体,和外部类是相互独立,外部类与内部类是不存在继承关系的。
3.外部类中可以有多个内部类。内部类可以实现不同接口。
4.内部类可以非常方便访问和使用外部类的成员。
作用:
- 内部类方bai法可以访问该类定义所在的作用域中的数据,包括私有的数据;
- 内部类可以对同一个包中的其他类隐藏以来;
- 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
1.2内部类种类
- 局部内部类(非静态内部类,成员内部类)类的方法里面写类
- 静态内部类 类的方法里面写静态类
- 私有内部类 类的方法里面写类用(private修饰)
- 匿名内部类 在new接口的时候写方法的实现就可以。这样我们就可以new接口了,因为我们实现了方法。这是位置不同。(简称:“你们累不累”)
1.3内部类代码
Outer outer=new Outer();
创建内部类1
Outer.Inner inner=outer.new Inner();
- 如果外部类Outer
- 和内部类Inner
- 和内部类方法里面都size,
- 在内部类方法里面怎么样区分,如下:
Outer.this.size;
this.size
size
1.4静态内部类
- 如果是静态内部类static Inner这样修饰。
- 访问外部方法和成员,则外部类要静态(static)修饰才可以访问。
1.5jdk1.8前使用
- 方法中内部类访问方法中变量要加final修饰,jdk8不一样
- int localvar2 = 3;(外部成员)
- //System.out.println( localvar2);///wrong,1.7有问题,1.8没有问题
- 要加final int localvarl = 2;
- System.out.println( localvarl);在内部类方法里面就都没有问题
1.6继承内部类
定义内部类继承内部类的类
使用继承的方法,
2.总结
- 如果外部类要使用内部类,则要new内部类如;new Inner().innerm();
- 内部类使用外部类,就不用new。
- 理解:因为使用外部类时候要new。则外部类使用内部类也要new。类的实现。
- 如果单独使用内部类,也要new。
- 如: Outer.Inner inner=new Outer().new Inner();
- 或
- Outer outer=new Outer();
- Outer.Inner inner=outer.new Inner();