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. 不能定义构造器,没有类名。
  • 相关阅读:
    嵌套查询别名必须性示例。HAVING用法
    分组查询限制。HAVING可写在GROUP BY前。
    合并查询结果集UNION(去重), UNION ALL(不去重),INTERSECT(交集),MINUS(差集,第一个结果集减去第二个结果集,第一个结果集中不在第二个结果集中的记录行),[NOT] EXIST
    18-matlab知识点复习一
    53-java中的queue
    52-2018 蓝桥杯省赛 B 组模拟赛(一)java
    51-迷宫(一)- java版dfs和bfs
    50-2018 蓝桥杯省赛 B 组模拟赛(五)
    49-2015年第6届蓝桥杯Java B组
    46-web页面登入前和登入后控制
  • 原文地址:https://www.cnblogs.com/zhouj-happy/p/5841878.html
Copyright © 2011-2022 走看看