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();
}
相关推荐
huangdong_24 分钟前
1688商品图片采集技术解析:登录态处理与SKU图自动分类
开发语言
马士兵教育24 分钟前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
chase_my_dream35 分钟前
C++ + SLAM 高频面试问题整理
开发语言·c++·面试
snow@li1 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
Cloud_Shy6181 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
云烟成雨TD1 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework1 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java
天佑木枫1 小时前
15天Python入门系列 · 序
开发语言·python
逍遥德2 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
云烟成雨TD2 小时前
Spring AI 1.x 系列【54】Retry 机制分析
java·人工智能·spring