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();
}
相关推荐
饕餮争锋14 小时前
Java泛型介绍
java·开发语言
程序媛徐师姐14 小时前
Java基于SSM的即时空教室查询小程序,附源码+文档说明
java·微信小程序·小程序·ssm·即时空教室查询小程序·java即时空教室查询小程序·即时空教室查询微信小程序
努力长头发的程序猿14 小时前
在Unity当中使用GameFrameworkX框架的知识点
java·unity·游戏引擎
飞Link15 小时前
告别复杂调参:Prophet 加法模型深度解析与实战
开发语言·python·数据挖掘
季明洵15 小时前
二叉树的最小深度、完全二叉树的节点个数、平衡二叉树、路径总和、从中序与后序遍历序列构造二叉树
java·数据结构·算法·leetcode·二叉树
zh_xuan15 小时前
测试go语言函数和结构体
开发语言·golang
AD钙奶-lalala15 小时前
SpringBoot 4.0.3配置Swagger
java·spring boot·后端
小龙报15 小时前
【算法通关指南:算法基础篇】二分算法: 1.A-B 数对 2.烦恼的高考志愿
c语言·开发语言·数据结构·c++·vscode·算法·二分
seven97_top15 小时前
NIO:解开非阻塞I/O高并发编程的秘密
java
小六溜了15 小时前
模块二十.双列集合
java