Java内部类

Java内部类

成员内部类, 局部内部类, 匿名内部类, 静态内部类

没有实际场景, 有些时候, 是体会不到的

内部类是个编译时的概念,一旦编译成功后,它就与 外围类 属于两个 完全不同的类(当然他们之间还是有联系的)。

对于一个名为 OuterClass 的 外围类 和一个名为 InnerClass 的 内部类,

在编译成功后,会出现这样两个class文件:OuterClass.class 和 OuterClass$InnerClass.class。

1. 成员内部类

成员内部类: 就是位于 外部类 成员位置 的类
特点: 可以使用 外部类 中所有的 成员变量 和 成员方法(包括private的)

class OuterClass {
    private int age = 20;
    
    // 成员位置
    // 在成员位置, 就叫成员内部类
    class InnerClass {
        public void show() {
            System.out.println(age);
        }
    }
}

2. 局部内部类

局部内部类: 就是定义在一个方法 或者 一个作用域 里面的类
特点: 主要是 作用域 发生了变化,只能在自身所在 方法 和 属性 中被使用

class OuterClass {
    public void method() {
        class InnerClass {
        }
    }
}

3. 匿名内部类

一个没有名字的类, 是内部类的简化写法

new 类名或者接口名() {
    重写方法();
}

4. 静态内部类

我们知道 static 是不能用来修饰类的, 但是成员内部类 可以看做是 外部类中的 一个成员,

所以可以用 static 修饰,

这种用 static 修饰的 内部类, 我们称作 静态内部类, 也称作 嵌套内部类

特点: 不能使用 外部类的 非static成员变量 和 成员方法

class OutterClass {
    int age1 = 10;
    static age2 = 20;
    
    public Outter() {        
    }
     
    static class Inner {
        public method() {
            System.out.println(age1);//错误
            System.out.println(age2);//正确
        }
    }
}

体会吧, 静态的 只能调 静态的, 统一性的观点

5. 为什么使用内部类

1, 封装性

2, 实现多继承

3, 用 匿名内部类 实现 回调功能

4, 解决继承 及 实现接口 出现 同名方法的问题

参考链接

https://www.yuque.com/ideal-20/java/rktowg

https://www.zhihu.com/question/26954130/answer/708467570

https://www.cnblogs.com/chenssy/p/3388487.html

https://www.cnblogs.com/dolphin0520/p/3811445.html

https://www.bilibili.com/video/BV1Kb411W75N?p=361

posted on 2021-11-03 14:20  beyondx  阅读(404)  评论(0编辑  收藏  举报

导航