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();
}
相关推荐
十年Java程序媛34 分钟前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko42 分钟前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
用户3126874877204 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang4 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing4 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员
吃饱了得干活5 小时前
一篇讲清楚Spring Boot:自动装配、启动器、过滤器、拦截器、设计模式
java·spring boot·后端
lhldsg6 小时前
AI零售系统实战指南:从架构设计到落地部署全解析
java·人工智能·小程序·uni-app·零售
Interview Aid1127 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
mldong7 小时前
换了工作流引擎,前端一行代码没改
java·架构
CoderIsArt14 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#