zoukankan      html  css  js  c++  java
  • java-内部类

    1 内部类与外部类的区别

    1. 内部类(除了局部内部类和匿名内部类)比外部类可以多使用三个修饰符:private、protected、static
    2. 非静态内部类不能拥有静态成员

    2 内部类的分类

    1. 成员内部类
      1. 非静态内部类
      2. 静态内部类
    2. 局部内部类
    3. 匿名内部类

    3 非静态内部类

    1. 非静态内部类不能有静态成员。
    2. 如果外部类成员变量、内部类成员变量与内部类方法的局部变量重名、可以通过 外部类类名.this、this来区分。
    3. 外部类静态成员不能直接(可以通过创建实例)访问非静态内部类的变量、方法,包括创建实例。

    4 静态内部类

    1. 外部类的上一级是包,所以不可使用static修饰。但是静态内部类的上一级是外部类,可以使用static修饰。
    2. 静态内部类只能访问外部内部类的静态成员。
    3. 外部类内部类只能直接(可以通过创建实例访问其他的成员)访问静态内部类的静态成员。
    4. 接口内部类只能是静态内部类,默认使用public static修饰。

    5 内部类的编译

    1. 内部类:OuterClass.class、OuterClass$InnerClass.class...
    2. 局部内部类:OuterClass.class、OuterClass$NInnerClass.class...
    3. 匿名类:OuterClass.class、OuterClass$NInnerClass.class...

    6 使用内部类

    6.1 在外部类内部使用内部类

    6.2 在外部类以外使用内部类

      不能使用private修饰内部类,跟变量和方法的修饰符一个意思。

      定义内部类变量:OuterClass.InnerClass varName,如果外部类有包名,加上包名;

    6.2.1 使用非静态内部类

      必须先创建外部类实例,才能创建内部类的实例。

      OuterInstance.new InnerContructor();

    public class InnerClassTest {
        public InnerClassTest(){}
        
        public class A{
            public A(String a){
                System.out.println(a);
            }
        }
    }
    
    class B extends InnerClassTest.A{
        public B(InnerClassTest innerClassTest) {
            innerClassTest.super("hello");
        }
    }
    
    class C{
        InnerClassTest.A a = new InnerClassTest().new A("hello");
    }
    View Code

    6.2.2 使用静态内部类

    OuterClass.InnerClass var = new OuterClass.InnerClass(...);

    7 局部内部类

    1. 不能用static和访问控制符修饰。
    2. 局部内部类和匿名内部类访问的局部变量默认是final修饰的,java 8以前必须显式使用final关键字修饰。

    7.1 普通的

    7.2 匿名内部类

    1. 必须实现一个类或一个接口
    2. 不能是抽象类,系统直接创建对象
    3. 不能定义构造器,没有类名。
  • 相关阅读:
    Mybatis插件开发入门,运行原理,例子
    ActiveMQ是什么,为什么使用MQ
    sql优化
    用户注册流程
    JMS入门Demo
    运维自动化之Ansible
    ceph安装部署
    ceph工作原理
    linux进程
    任务计划
  • 原文地址:https://www.cnblogs.com/zhouj-happy/p/5841878.html
Copyright © 2011-2022 走看看