java关于内部类

内部类定义

在一个类内部的类,称为内部类。

说明:内部类通常表示**"**整体与部分" 的关系

B 是 A 的一部分

B 单独存在没有实际意义

分类

类型 定义位置
成员内部类 类中,方法外
静态内部类 类中,方法外(static 修饰)
局部内部类 方法中
匿名内部类 方法中,没有类名

成员内部类

可以被修饰符所修饰,例如:private、默认、protected、public、static(静态内部类)

创建对象方式

在外部类中编写方法,对外提供内部类的对象

java 复制代码
class Outer {
    class Inner {}

    public Inner getInner() {
        return new Inner();
    }
}

直接创建格式

java 复制代码
Outer.Inner inner = new Outer().new Inner();

静态内部类

创建对象方式

直接创建格式

java 复制代码
Outer.Inner inner = new Outer.Inner();

访问规则

只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象

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

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

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

局部内部类

访问规则

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

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

匿名内部类

本质

是隐藏了名字的内部类

格式

new 类名或接口名(){

重写方法

}

new Swim() {

@Override

public void swim() {

System.out.println("游泳");

}

};

等价过程

去掉 class

这个"没有名字的类"实现 Swim 接口

必须重写接口中所有抽象方法

同时创建了该类的对象

使用场景

当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以用匿名内部类简化代码

java 复制代码
public static void main(String[] args) {
    method(new Swim() {
        @Override
        public void swim() {
            System.out.println("自由泳");
        }
    });
}

public static void method(Swim s) {
    s.swim();
}
相关推荐
IvanCodes2 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
步行cgn3 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风3 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
aramae4 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路4 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog5 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog5 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
Ivanqhz5 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
qq_2518364576 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
caoerzhong7 小时前
JeeWMS 开源仓库管理系统全景解读:一套 Java WMS 如何把 WMS/OMS/BMS/TMS 装进同一个系统
java·开源