张小飞的Java之路——第十二章-内部类

本文介绍了Java中的内部类概念,包括定义、特点和不同类型的内部类,如静态内部类和匿名内部类。内部类可以直接访问外部类的成员,静态内部类无需外部类实例即可创建,而匿名内部类则是一种简洁的实现接口或父类功能的方式,常用于快速实现简单功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?

1. 介绍

张小飞:什么是内部类?

诸小亮:就是将一个类定义在另一个类的内部,比如:

class People{
    int idCard;
    // Person 在 People 的内部,它就是内部类,而 People 称为:外部类
    class Person{
        int age;
    }
}

张小飞:原来如此

诸小亮:这时候,Person就是内部类,而 People 是外部类

2. 特点

诸小亮:使用内部类需要注意几点

内部类是外部类中的成员, 所以可以使用 public,private,static 这样的修饰符

比如:

image.png
image.png

创建内部类对象前,需要先创建外部类对象
public static void main(String[] args){
    //创建内部类对象,需要先创建外部类对象
    // People.Person person = new People().new Person();
    
    People p = new People();
    People.Person person = p.new Person();
}
内部类中可以直接访问外部类中的成员

比如:

image.png

张小飞:最后一点需要您解释一下

诸小亮:没问题

因为内部类中持有了外部类中的引用,所以可以直接使用外部类的属性

其实完整写法应该是:
image.png
上图 People.this 就是我们创建的 People 对象

张小飞:能否证明一下?

诸小亮:看下面代码

class People{
    int idCard;
    public class Person{
        void show(){
            System.out.println(People.this);//输出People.this的值
        }
    }
}

public class Demo{
    public static void main(String[] args){
        People p = new People();
        System.out.println(p);//输出p的值
        People.Person person = p.new Person();
        person.show();
    }
}

结果:image.png

3. 静态内部类

诸小亮:当内部类加上 static 修饰符,那么它就是静态内部类,它也有一些特点:

只能访问外部类中的静态成员

image.png

创建静态内部类对象,不用创建外部类对象

image.png

张小飞:这个简单

4. 匿名内部类

诸小亮:接着,我们就说最后一个——匿名内部类?

张小飞:没有名字的内部类?

“不错,就是没有名字的内部类(其实就是内部类的简写方式)”

“这我倒是想见识一下”

1. 演示

诸小亮:看下面代码

interface People{
    void show();
}
public class Demo{
    public static void main(String[] args){
        //匿名内部类:必须继承某个外部类或实现某个接口
        People p = new People() {//该类没名字,只能用父接口或父类的名字创建对象
            //实现show方法
            @Override
            public void show() {
                System.out.println("我是匿名内部类。。。。。");
            }
        };
        //调用show方法
        p.show();
    }
}

结果:image.png
张小飞:原来是这样子

诸小亮:另外,它也有另一种叫法:匿名内部类对象

张小飞:不过,这有什么用呢?

2. 好处

诸小亮:一般情况下应该一个类写一个 java 文件(之前为了方便,都写在一个java文件中)

好处:不用重新创建新的 java 文件

就像上面的 People 接口,如果想创建 People 类型的对象,又不想写实现类,这时就可以用匿名内部类

张小飞:明白了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值