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();
相关推荐
考虑考虑28 分钟前
Jpa使用union all
java·spring boot·后端
用户3721574261351 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊2 小时前
Java学习第22天 - 云原生与容器化
java
渣哥4 小时前
原来 Java 里线程安全集合有这么多种
java
间彧4 小时前
Spring Boot集成Spring Security完整指南
java
间彧4 小时前
Spring Secutiy基本原理及工作流程
java
Java水解5 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆7 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学8 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole8 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端