学习内部类,作用,种类,场景,jdk更新的变化

1.内部类

1.1内部类定义

定义:

  • 一个类定义在另外一个类中或另外一个类的方法中。内部类会继承某个类或某个接口。 内部类代码可以直接操作外部类的对象和成员变量。
    内部类所提供的其实是针对外部类的某种功能。

优势:

  • 1.内部类不受外部类是否继承某个类,是多重继承的完美解决方案,是对java单一继承的有益补充。
    2.内部类可以有多份实体,和外部类是相互独立,外部类与内部类是不存在继承关系的。
    3.外部类中可以有多个内部类。内部类可以实现不同接口。
    4.内部类可以非常方便访问和使用外部类的成员。

作用:

  • 内部类方bai法可以访问该类定义所在的作用域中的数据,包括私有的数据;
  • 内部类可以对同一个包中的其他类隐藏以来;
  • 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

1.2内部类种类

  • 局部内部类(非静态内部类,成员内部类)类的方法里面写类
  • 静态内部类 类的方法里面写静态类
  • 私有内部类 类的方法里面写类用(private修饰)
  • 匿名内部类 在new接口的时候写方法的实现就可以。这样我们就可以new接口了,因为我们实现了方法。这是位置不同。(简称:“你们累不累”)

1.3内部类代码

学习内部类,作用,种类,场景,jdk更新的变化
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继承内部类

定义内部类
学习内部类,作用,种类,场景,jdk更新的变化继承内部类的类
学习内部类,作用,种类,场景,jdk更新的变化使用继承的方法,
学习内部类,作用,种类,场景,jdk更新的变化

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();