局部内部类
- 内部类是定义在一个类的内部。通常是在方法中。
- 本质还是一个类,可以访问外部类的所有成员,包含私有的。
- 不能使用访问修饰符。但是可以使用final修饰符。
- 作用域尽在定义它的方法或者代码块中。
- 外部其他类不能访问局部内部类(因为局部内部类的地位就是衣个局部变量)。
- 如果外部类和局部类的成员变量重名。遵守就近原则。如果要访问外部类变量。 可以通过 类型.this.成员 去访问。
匿名内部类
- 该类没有名字。
- 是一个对象。
- 定义外部类的局部位置,比如方法中,并且没有类名。(系统底层会分配一个类型)。
- 匿名内部类使用一次就没了(生成的对象是可以多次使用)。
- 匿名内部类是为了简化开发。
1 package anonymous;
2
3 public class InnerClass {
4 public static void main(String[] args) {
5 new Test().run();
6 }
7 }
8
9
10 class Test {
11
12 public void run() {
13 Animal dog = new Animal() {
14 @Override
15 public void Say() {
16 System.out.println("小狗汪汪");
17 System.out.println(this.getClass());
18 }
19 };
20 dog.Say();
21 }
22 }
23
24
25 interface Animal {
26 void Say();
27 }
----------
输出结果。
小狗汪汪
class anonymous.Test$1
成员内部类
- 定义为的位置是成员位置。
- 外部其他类可以调用成员内部类。
1 package anonymous;
2
3 public class MemberInnerClass {
4 public static void main(String[] args) {
5 Test01 test01 = new Test01();
6 Test01.InnerClass innerClass = test01.new InnerClass();
7 innerClass.Run();
8 }
9 }
10
11 class Test01 {
12
13 class InnerClass {
14 public void Run() {
15 System.out.println("这是成员内部类");
16 }
17 }
18 }
静态内部类
- 静态内部类还是定义在成员位置,但是他有static修饰。
- 可以直接访问外部类的所有静态成员,包括私有的。但是不能直接访问非静态的成员。
非静态内部类
非静态内部类是一个类中嵌套着另外一个类。 它有访问外部类成员的权限, 通常被称为内部类。
由于内部类嵌套在外部类中,因此必须首先实例化外部类,然后创建内部类的对象来实现。
Java编程学习交流圈子:603835449【点击进入】
分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!