JAVA 内部类

分类

  1. 成员内部类

  2. 静态内部类

  3. 局部内部类

  4. 匿名内部类 (掌握)

java 复制代码
成员内部类

位置: 类以内,方法以外,和属性,方法平级

[public] class 外部类类名{
    
    [public] class 内部类类名{
        
    }
}


外部类类名.内部类类名 对象名=外部类对象名.new 内部类类名();
//创建一个外部类的对象
        Outer1 o1 = new Outer1();
        //创建内部类的对象
        Outer1.Inner1 i1 = o1.new Inner1();
        i1.mb();
java 复制代码
静态内部类

位置: 与成员内部类相同

[public] class 外部类类名{
    
    [public] static class 内部类类名{
        
    }
}

外部类类名.内部类类名 对象名=new 外部类类名.内部类类名();

package com.by.entity;

/**
 * 静态内部类
 */
public class Outer2 {
    int a=100;//非静态属性
    static int b = 200;//静态属性
    static String str = "外部类静态属性";

    public static class Inner2{
        static String str = "内部类静态属性";

        public static void method(){
            String str = "内部类局部变量";
            System.out.println(str);//局部变量
            System.out.println(Inner2.str);//内部类属性
            System.out.println(Outer2.str);//外部类属性
            //System.out.println(a);
            System.out.println(b);
        }
        public void ma(){
            String str = "内部类局部变量";
            System.out.println(str);
            System.out.println(this.str);//静态内部类中的实例方法执行时一定存在当前对象
            System.out.println(Outer2.str);//外部类的实例对象this无法进入静态内部类使用,无法使用Outer2.this
           // System.out.println(a);
            System.out.println(b);
        }


    }
}

//直接访问内部类的静态内容
        Outer2.Inner2.method();
        //访问静态内部类的非静态内容
        Outer2.Inner2 i2 = new Outer2.Inner2();
        i2.ma();
java 复制代码
局部内部类
位置: 外部类方法内部,与外部类局部变量平级

[public] class 外部类类名{
    访问修饰符 返回值类型 方法名(形参列表){
        class 内部类类名{
            
        }
    }
}



package com.by.entity;

/**
 * 局部内部类
 */
public class Outer3 {


    public void method(){

        String str = "外部类的局部变量";
       // str = "正在更改外部类局部变量的值";

        //局部内部类
        class Inner{

            public void get(){
                System.out.println(str);
            }
        }

        //创建内部类对象
        Inner inner = new Inner();
        inner.get();
    }
}
java 复制代码
匿名内部类

接口名|父类类名 引用名=new 接口名|父类类名(){
  //实现类内容  
};


接口
package com.data.entity;

public interface IA {
    public void ma();
}

//利用匿名内部类创建一个IA接口的实现类对象
        IA ia2=new IA() {
            @Override
            public void ma() {
                m1();
                System.out.println("这是匿名实现类中的ma");
            }

            public void m1(){
                System.out.println("这是匿名实现类的独有方法");
            }
        };
        ia2.ma();
相关推荐
Boilermaker199215 分钟前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维28 分钟前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS31 分钟前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂1 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs1 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_991 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子1 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34161 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
古城小栈1 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
ghie90902 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab