0
点赞
收藏
分享

微信扫一扫

JAVA基础13——内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

杨沐涵 2022-02-13 阅读 148
  • 成员内部类

  • 静态内部类

  • 局部内部类

  • 匿名内部类

1、成员内部类(实例内部类、非静态内部类)

  • 成员内部类中不能写静态属性和方法
  • 实例化内部类,首先需要实例化外部类,通过外部类去调用内部类  

作用

  • 要想访问内部类中的内容,必须通过外部类对象来实例化内部类。
  • 能够访问外部类所有的属性和方法,原理就是在通过外部类对象实例化内部类对象时,外部类对象 把自己的引用传进了内部类,使内部类可以用通过Outer.this去调用外部类的属性和方法

2、静态内部类

使用你 static 修饰的内部类就叫静态内部类。

(注意:

  1. static修饰成员变量:整个类的实例共享静态变量
  2. static修饰方法:静态方法,只能够访问用static修饰的属性或方法,而非静态方法可以访问static修 饰的方法或属性
  3. static修饰了的成员变量和方法能直接被类名调用
  4. static不能修饰局部变量)

1、我们上面说的内部类能够调用外部类的方法和属性,在静态内部类中就不行了,因为静态内部类没有 了指向外部类对象的引用。除非外部类中的方法或者属性也是静态的。这就回归到了static关键字的用 法。(静态内部类不能直接访问外部类的非静态方法

2、静态内部类能够直接被外部类给实例化,不需要使用外部类对象

            Outer . Inner inner = new Outer . Inner ();

3、局部内部类:

  • 局部内部类是在一个方法内部声明的一个类
  • 局部内部类中可以访问外部类的成员变量及方法
  • 局部内部类中如果要访问该内部类所在方法中的局部变量,那么这个局部变量就必须是fifinal修饰的
  • 局部内部类只能在自己的方法中用,因为局部内部类相当于一个局部变量,除了方法就找不到了

 

4、匿名内部类

首先了解一下什么是匿名对象?

如果一个对象只要使用一次,那么我们就是需要 new Object().method() 。 就可以 了,而不需要给这个实例保存到该类型变量中去。这就是匿名对象。

匿名内部类跟匿名对象是一个道理,匿名内部类,我也只需要用一次,那我就不需要在类中先定义一个内部类,而是等待需要用的时候,我 就在临时实现这个内部类,因为用次数少,可能就这一次,那么这样写内部类,更方便。

1、匿名内部类需要依托于其他类或者接口来创建

  • 如果依托的是类,那么创建出来的匿名内部类就默认是这个类的子类
  • 如果依托的是接口,那么创建出来的匿名内部类就默认是这个接口的实现类。

2、匿名内部类的声明必须是在使用 new 关键字的时候

  • 匿名内部类的声明及创建对象必须一气呵成,并且之后能反复使用,因为没有名字。

 

举报

相关推荐

0 条评论