Java中的静态内部类和实例内部类

package com.pzistart.msgdemoimpl.enumtest;

import lombok.Data;

/**
 * @author Pzi
 * @create 2022-10-19 10:29
 */
public class A {

    public static void main(String[] args) {
        B b = new B();
        b.getB();
        B.getC();
        System.out.println(b.name);
        System.out.println(B.name1);
    }

    private static String d;

    /**
     * 静态内部类,可以访问外部类的静态成员
     */
    @Data
    public static class B {
        private String name;
        private static String name1;

        private void getB() {
        }

        private static void getC() {
        }
    }

    /**
     * 实例内部类,就如同外部类的一个成员变量一样,生命周期和其一致
     */
    class C {
        private String c;
        /*
        //静态变量,随着类的加载而加载。而成员内部类是属于类的实例化对象的,所以不能将静态变量成员在这里
        private static String d;
        public static void getD(){
        }*/
        private static final String e = "e";
    }

    /**
     * 局部内部类,定义在方法中的
     */
    public void outerClassMethod() {
        class D {
            public void methodD() {
                System.out.println("D");
            }
        }
    }
}

静态内部类

1. 可以访问外部类的静态成员。
2. Java中静态内部类可以被实例化,该对象可以调用静态内部类中的非静态成员。b.name b.getB()。
3. 静态内部类名能直接调用类中的静态私有成员变量。B.name1,B.getC()。

实例内部类

如同外部类的一个成员变量一样,生命周期和其一致。不能访问外部类的静态成员。

局部内部类

它是被定义在方法中的,局部内部类中不能定义静态成员。

匿名内部类

  • 匿名内部类被定义出来后,就是某个抽象类/接口的子类对象。
  • 没有名字的局部内部类就叫做匿名内部类。
  • 匿名内部类被定义出来后,就是某个抽象类/接口的子类对象。

调用方式

1. 在其他类中,只能创建类A的静态内部类;不能创建类A的实例内部类。
posted @ 2022-10-19 11:06  pzistart  阅读(102)  评论(0编辑  收藏  举报