Java 内部类

文章目录

内部类

  1. 一个事物的内部,还需要一个完整的结构进行描述,而这个结构只为外部服务,这个内部的完整结构叫内部类
  2. 可以将一个类定义到另一个类内,或一个方法内,里面的是内部类,外面的是外部类

实例内部类

  1. 如何实例化内部类
  2. 外部类的成员在内部类中都能直接访问
java 复制代码
package test2;

class outClass{
    private int a = 3;
    public static int b = 2;

    class inClass{
        private int  a = 1;
        // 在运行时确定的
        // static修饰的调用不需要实例化就能调用,而这个变量在内部类需要实例化内部类才能使用
        // public static int d = 2;
        public static final int d = 3;// 在编译的时候就确定了,是个常量,不依赖于实例化
        public int e = 2;

        public void test() {
            System.out.println("inClass::test");
            System.out.println(this.a);// 1
            System.out.println(a);// 1
            System.out.println(outClass.this.a);// 3
        }
    }

    public void test(){
        inClass inclass = new inClass();
        System.out.println(inclass.a);
        System.out.println(inclass.e);
        System.out.println("outClass::test");
    }
}

public class testnbl {
    public static void main(String[] args) {
        // 实例化内部类
        outClass class1 = new outClass();
        outClass.inClass class2 = class1.new inClass();
        outClass.inClass class3 = new outClass().new inClass();

        class1.test();
        class2.test();
    }
}
  1. 字节码文件
    外部类类名$内部类类名.class

静态内部类

  1. 静态内部类不需要有外部类对象的引用
  2. 创建外部类对象的引用
java 复制代码
class oclass{
    private int a = 1;
    public static int b = 2;
    public int c = 3;

    static class iclass{
        public int d = 4;
        public static int e = 5;
        private int f = 6;

        public void test(){
            oclass Out = new oclass();
            System.out.println(Out.a);
            System.out.println(b);
            System.out.println(Out.c);
            System.out.println(d);
            System.out.println(e);
            System.out.println(f);

            System.out.println("iclass::test");
        }
    }

    public void test(){
        System.out.println("oclass::test");
    }
}

public class testnbl {

    public static void main(String[] args) {
       oclass.iclass a = new oclass.iclass();
       a.test();
    }
}

匿名内部类

  1. 你有一个类实现了IA接口,重写了test方法
java 复制代码
interface IA{
    void test();
}

public class testnbl {

    public static void main(String[] args) {
        // 第一种方法调用
        // 匿名内部类对象
        IA a = new IA(){
            public void test(){
                System.out.println("重写了接口的方法!");
            }
        };

        a.test();
        
        // 第二种方法调用
         new IA(){
            public void test(){
                System.out.println("重写了接口的方法!");
            }
        }.test();
    }
}

局部内部类

  1. 只能在其方法内部使用
  2. 不能被public和static修饰符修饰
  3. 很少使用
  1. 字节码文件
相关推荐
仍然.14 小时前
Spring MVC(1)---介绍Spring MVC 和 请求数据
java·spring·mvc
星越华夏14 小时前
python中四种获取文件后缀名的方法
开发语言·python
DianSan_ERP14 小时前
架构师视角:电商大促高并发下的订单API限流与防漏单架构演进
java·运维·网络·安全·微服务·架构·自动化
云烟成雨TD14 小时前
Agent Scope Java 2.x 系列【6】消息层
java·人工智能·agent
云烟成雨TD14 小时前
Spring AI Alibaba 1.x 系列【74】Agentic RAG 与混合 RAG
java·人工智能·spring
小刘|14 小时前
Spring AI 结构化输出 + 大模型参数全解(含千问调优)
java·后端·spring
云烟成雨TD14 小时前
Spring AI Alibaba 1.x 系列【79】图执行生命周期的可观测性基础设施
java·人工智能·spring
霸道流氓气质14 小时前
Java 单元测试生成大量 Excel 测试数据实战指南
java·单元测试·excel
io无心14 小时前
基于Image 2的多配件商品图生成技术实现(已开源)
java·image2
javajenius14 小时前
Pixi:用 Rust 重写 Conda 体验的包管理工具
开发语言·其他·rust·conda