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();
}
相关推荐
xuzhiqiang07245 小时前
Java进阶之路,Java程序员职业发展规划
java·开发语言
时艰.5 小时前
订单系统历史数据归档方案
java
MediaTea5 小时前
Python:生成器表达式详解
开发语言·python
一只叫煤球的猫7 小时前
ThreadForge v1.1.0 发布:让 Java 并发更接近 Go 的开发体验
java·后端·性能优化
overmind7 小时前
oeasy Python 115 列表弹栈用pop删除指定索引
开发语言·python
014.7 小时前
2025最新jenkins保姆级教程!!!
java·运维·spring boot·spring·jenkins
浣熊8887 小时前
天机学堂虚拟机静态ip无法使用(重启后ip:192.168.150.101无法使用连接Mobaxterm数据库等等,或者无法使用修改之后的Hosts域名去访问nacos,jenkins)
java·微服务·虚拟机·天机学堂·重启之后静态ip用不了
心 -8 小时前
java八股文IOC
java
Never_Satisfied8 小时前
在c#中,使用windows自带功能将文件夹打包为ZIP
开发语言·windows·c#
hnxaoli8 小时前
win10程序(十六)通达信参数清洗器
开发语言·python·小程序·股票·炒股