内部类

简介: 内部类是定义在类中的类,分为成员、静态、局部和匿名四种。成员内部类属于外部类成员,可被权限修饰符修饰;静态内部类仅访问外部静态成员;局部内部类定义在方法内;匿名内部类用于简化接口或父类的实现,常用于一次性场景,提升代码简洁性。(238字)

内部类

写在一个类里面的类叫做内部类

内部类的分类

成员内部类/静态内部类/局部内部类/匿名内部类

成员内部类

写在成员位置的,属于外部类的成员。

成员内部类可以被一些修饰符所修饰,比如:private,默认,protected,public,static等。

在成员内部类中,JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量。

public class Outer {
   
    String name;
    Private class Inner{
   

    }
    //因为Inner用private修饰,故需要提供给其他类创建对象的方法,用getInstance获取Inner对象给使用者
    public Inner getInstance(){
   
        return new Inner();
    }
}
public class test{
   
    public static void main(String Args[]){
   
        Outer o = new Outer();
        /*由于private修饰,所以不能使用Inner.oi去获取getInstance返回的对象,可以使用其父类object(超类)来接收*/
        object oi = o.getInstance();//$符号供内部类使用
        System.out.println(oi);//Outer$Inner@4eec7777
        //outer.Inner oi = new OUter().new Inner();
        //System.out.println(Outer.this.变量名);
    }
}

/内部类的堆内存中会自动生成一个“父类名.this”去记录外部类的地址/

静态内部类

静态内部类是一种特殊的成员内部类。

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

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

//new出来的对象是Inner的对象
Outer.Inner oi = new Outer.Inner();

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

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

局部内部类

将内部类定义在方法里面就叫做局部内部类,类似与方法里面的局部变量。局部内部类和局部变量一样,都不能使用public,static,protected等修饰符修饰

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

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

pubolic class Outer{
   
    public void show(){
   
        int a = 10; 
    }
    //局部内部类
    class Inner{
   
        String name;
        int age;
        public void method1(){
   
            System.out.println("局部内部类中的method1方法");
        }       
        public static void method2(){
   
            System.out.println("局部内部类中的method2静态方法");
        }
    }
    //创建局部内部类的对象
    Inner i = new Inner();
    System.out.println(i.name);
    System.out.println(i.age);
    i.method1();
    Inner.method2();
}
匿名内部类(常用且重要)

匿名内部类本质上就是隐藏了名字的内部类(继承/实现、方法重写、创建对象)

example:
    //new 类名或者接口名
    new Inner() {
   
        //需要重写方法
        public void show() {
   
        }
    };//注意大括号末尾有一个分号

匿名内部类可以写在成员位置,也可以写在局部位置

匿名内部类格式的细节:1,包含了继承或实现,方法重写,创建对象。2,整体就是一个类的子类对象或者接口的实现类对象。

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

很牛逼QAQ

// Today is not easy, tomorrow is more difficult, but the day after tomorrow will be wonderful.

相关文章
|
4天前
经典题:求一个数是否为质数
介绍质数判断与自幂数概念:质数为仅被1和自身整除的大于1的自然数;自幂数是n位数等于各位数字n次幂之和,如水仙花数(三位)、四叶玫瑰数(四位)等,体现数字的独特数学之美。(239字)
41 1
|
4天前
|
存储
原码,反码,补码
原码是二进制的直观表示,符号位决定正负;反码用于解决负数计算问题,负数按位取反;补码在反码基础上加1,解决跨0误差。计算机中所有数据存储与运算均采用补码形式,可准确处理正负数运算,并能多表示一个特殊值-128。
64 5
|
4天前
|
Java Go 开发者
IDEA开发常用的快捷键
IntelliJ IDEA常用快捷键汇总:涵盖代码生成(如main、sout)、编辑(复制、删除、重命名)、导航(跳转、查找)、格式化、代码阅读及版本控制等高频操作,提升开发效率。熟练掌握可显著优化编码体验,是Java开发者必备技能。
64 1
|
3天前
|
存储 Java BI
低延迟流处理系统设计:别再迷信“又快又准”,工程从来都是妥协的艺术
低延迟流处理系统设计:别再迷信“又快又准”,工程从来都是妥协的艺术
44 6
|
3天前
|
域名解析 网络协议 Linux
Linux网络基础完全指南(小白也能看懂的网络入门教程)
本教程系统讲解Linux网络基础,涵盖IP地址、子网掩码、网关、DNS等核心概念,介绍ifconfig、ip、ping等常用命令及网络配置文件的使用方法,助力掌握Linux网络配置技能。
200 117
|
3天前
|
存储 弹性计算 Cloud Native
2026年最新一期阿里云优惠券解析:五种主要优惠券类型、金额、领取及使用规则讲解
为了进一步降低用户的上云成本,2026年阿里云继续推出多种优惠券,以助力用户轻松实现数字化转型。本文将全面介绍阿里云目前提供的五种主要优惠券类型,包括老友专属福利券包、无门槛优惠券、出海补贴优惠券、迁云补贴优惠券以及按量达标代金券等,帮助用户深入了解这些优惠券的金额、领取及使用规则,从而更好地利用这些优惠,提升购买体验。
|
4天前
|
存储 Web App开发 安全
2026年网站搭建教程(详细的建站步骤)
企业网站搭建全流程:从需求分析、架构规划到域名注册、主机配置,依托PageAdmin系统完成部署与内容建设,经多维度测试后正式上线。流程覆盖前期准备、基础搭建、系统安装、内容填充及发布运维,确保网站稳定、兼容、易维护,适用于企业、政务等机构,具备强复制性与标准化指导意义。(238字)
111 3
|
6天前
|
供应链 容器
什么是code128码?
Code 128码是一种高密度条形码,支持全ASCII字符,广泛用于物流、运输和供应链管理。它分为A、B、C三个子集,可编码字母、数字及控制符,具有高密度、小空间优势,适用于复杂数据编码需求。
239 3
|
4天前
泛型
泛型用于解决数据类型不确定的问题,提升程序通用性与安全性。使用时需注意:只能用引用类型,支持类型擦除,默认为Object。可用于类、方法、接口,常见形式如`ArrayList<E>`,通过`<T>`声明类型参数,实现灵活复用与编译期检查,避免运行时错误。(238字)
34 1
|
5天前
|
存储 索引 Python
图解python | 字典
字典是Python中基于键值对的可变容器,通过键快速查找值。本文以图解+实战形式详解其结构、增删改查操作及特性,并结合字符统计案例,帮助掌握字典的核心用法与应用场景。
53 8