Java - 内部类

文章详细介绍了Java中的四种内部类:本地内部类、实例内部类、静态内部类和匿名内部类,强调了它们的定义、使用场景、实例化方式以及如何访问外部类的属性。实例内部类不能定义静态成员,但静态内部类可以,并且在访问外部类的非静态成员时需要使用外部类的this关键字。

1、本地内部类
2、实例内部类
3、静态内部类
4、匿名内部类
首先,我要在这声明一下,内部类也是类,不管它是属于何种类型。

只要是类,就会有类的特性:继承 / 被继承,实现接口,套娃【内部类再套一个内部类】 都是可行的。

一、本地内部类

定义在方法里面的内部类,只能在方法中使用。

public void func(){
        class Age{
            public int num;
            public Age(){
                System.out.println("hehe");
            }
        }
    }

这基本上很少使用。了解一下就行了

二、实例内部类

定义一个普通类,将这个类放到另一个普通类里面,在类里面的类就叫做实例内部类,比如说:
在这里插入图片描述
在外面的类就可以叫做外部类,不管是实例内部类还是外部类,都可以有自己的方法和属性。

但是在实例内部类里面不能定义静态的方法和属性,因为静态的方法和属性是属于对象的。
在这里插入图片描述
如果一定要加上static,那就要加上final,这样的话这个属性就是常量
在这里插入图片描述

如何实例化内部类
我们知道普通类是可以实例化的,那内部类呢????
在这里插入图片描述
简单来说:想要获取实例内部类的类型,是需要借助外部类的类名。你可以这么理解:在获取实例内部类的类型时,需要标明它是那个类的实例内部类。

至于后面的实例化,就如前我们前面一直在说的:将实例内部类当做是外部类的成员变量。也就是说需要借助外部类的对象来调用的。事实上确实如此

2.1、内部类的使用

在我们模拟实现顺序表、链表、二叉树等等,我们是不是要定义的 节点类。
我们一般是放在 构建 这些数据结构类的外面,其实是可以放在放在里面的。
你可以这么去理解:就是一个类 需要有 几部分组成,而这几个可以抽象成几个类。那么这几个类就可以用到 实例内部类。

class MyLinkedList{
    //在创建链表的时候,就需要创造节点,这个节点可以在MyLinkedList里面创建
    class Node{
        public int val;
        Node prev;
    }
}

2.2、内部类的字节码文件

在这里插入图片描述

2.3、在实例内部类中 包含与 外部类 属性名字相同的属性。那么如何在 实例内部类中访问?

//普通类
class OuterClass{
    public int data1 = 1;
    private int data2 = 2;

    //实例内部类
    class InterClass{
        public int data3 = 3;
        private int data4 = 4;
        public int data1 = 999;
        public static final int data5 = 5;
        public void func1(){
            System.out.println(OuterClass.this.data1);
            System.out.println("实例内部类的func():::");
        }
    }
    public void func1(){
        System.out.println("普通类的func():::");
    }
}

在这里插入图片描述

2.4、实例内部类 - 重要的几个点

1、在实例内部类当中 不能定义一个静态的成员变量 和 方法。如果非要定义,只能定义一个静态常量(就是加上final)。
2、如何实例化 实例内部类的对象 : 外部类类名.实例内部类类名 引用变量 = 外部类的对象引用.new 内部类类名();
3、实例内部类当中 如果包含了和外部类同名的成员变量。
在实例内部类的内部,访问实例内部类的成员变量时,可以不用加修饰,直接输出。
但是!在实例内部类的内部,访问外部类的成员变量时,需要加上 外部类类名.this. 同名成员变量,才能访问。

三、静态内部类

静态内部类和实例内部类差不多,只是多了一个static修饰
在这里插入图片描述
跟 实例内部一样,静态内部类可以看作 外部类的一个 静态成员变量/方法。
因此,静态内部类 和 实例内部类,又会多出一个区别。
就是 静态内部类,可以定义 静态的成员和 方法。

3.1、如何访问外部类的普通的成员变量

在这里插入图片描述

匿名内部类以前讲过了,这里就不提了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Später321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值