内部类

什么是内部类?

    写在一个类里面的类

什么时候用到内部类?

    当B类是A类的一部分,且B类单独存在时没有意义

    例如: 汽车的发动机,ArrayList的迭代器,人的心脏等等

内部类的分类

    (1)成员内部类

成员内部类的代码如何书写

            写在成员位置的,属于外部类的成员

            成员内部类可以被一些修饰符所修饰,比如private,默认,public,protected,static等

            在成员内部类里面,JDK16之前不能定义静态变量,JDK16以后才可以定义静态变量

如何创建成员内部类的对象

            方式一:在外部类中编写方法,对外提供内部类的对象(一般用private修饰的内部类,使用这种方法)

            方式二: 直接创建

            外部类名.内部类名 对象名= 外部类对象.内部类对象;

            范例: Outer.Inner oi = new Outer().new Inner();

内部类的成员变量与外部类成员变量重名时,在内部类如何访问外部类的成员变量?

            System.out.println(Outer.this.变量名);

    (2)静态内部类

    静态内部类也是成员内部类的一种,静态内部类只能访问外部类中的静态变量和静态方法, 如果想要访问非静态的需要创建对象.

创建静态内部类对象的格式: 外部类名.内部类名 对象名 = new 外部类名.内部类名();

调用非静态方法的格式: 先创建对象, 用对象调用

调用静态方法的格式: 外部类名.内部类名.方法名();

  (3)局部内部类

    1. 将内部类定义在方法里面就叫做局部内部类, 类似于方法里面的局部变量.

    2. 外界是无法直接使用, 需要在方法内部创建对象并使用.

    3. 该类可以直接访问外部类的成员, 也可以访问方法内的局部变量.

  (4)匿名内部类

1. 什么是匿名内部类

    匿名内部类本质上就是隐藏了名字的内部类, 可以写在成员位置, 也可以写在局部位置.

2. 格式:

    new 类名或者接口名(){

        重写方法;

};

举例:

    new Inter(){

        public void show(){

    }

};

3. 格式的细节

    包含了继承或实现, 方法重写, 创建对象.

    整体就是一个类的子类对象或者接口的实现类对象

4. 使用场景

    当方法的参数是接口或者类的时候,

    以接口为例, 可以传递这个接口的实现类对象,

    如果实现类只要使用一次, 就可以用匿名内部类简化代码.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容