java内部类

      • 代码
      • 优点
      • 非静态内部类vs静态内部类

java内部类_第1张图片

代码

public class InnerClass {
    /**
     * 成员内部类
     * */
    class InnerClass1 {
    }

    /**
     * 静态内部类
     * */
    static class InnerClass2 {
    }

    /**
     * 局部内部类
     *  和局部变量一样,没有修饰符
     *  只在当前方法中有效
     *  不能定义 static 成员。
     *  局部内部类中还可以包含内部类,但是这些内部类也不能使用访问控制修饰符
     *  可以访问外部类的所有成员。
     *  只可以访问当前方法中 final 类型的参数与变量。如果方法中的成员与外部类中的成员同名,则可以使用 .this. 的形式访问外部类中的成员。
     * */
    public void methodTest(){
        class MethodClass{

        }
    }

    /**
     * 匿名内部类
     * 针对父类/接口 不创建子类/接口实现类,直接new
     * */
    InnerInterface innerClass4 = new InnerInterface() {
        @Override
        public void innerClassTestMethod() {

        }
    };
    
}

优点

  1. 可实现隐蔽,类前+private/protected
  2. 内部有外部的访问权限
  3. 实现多重继承:java为单继承,外部类和内部类各自继承,外部可以访问内部类
  4. 处理类与接口方法同名

非静态内部类vs静态内部类

非静态内部类 静态内部类
持有外部类引用,可直接访问外部 持有外部类类名,访问外部静态成员/方法
不能定义static成员/方法
可定义在任何位置 定义在外部的最外层
外:public、protected 外:public、protected
内:class
创建实例时,必须先创建外部类实例 不依赖外部
静态方法中的内部类为静态内部类(无需static)
可直接访问外部类的static和局部变量

你可能感兴趣的:(笔记,java,jvm,开发语言)