Java内部类之静态内部类

静态内部类(嵌套内部类):

  1. 内部类定义时加上static关键字。
  2. 可以使用public 、protected 、default 、private修饰符。
  3. 只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。
  4. 生成静态内部类对象的方式为:OuterClass.InnerClass innerObj = new OuterClass.InnerClass();
  5. 如果不需要内部类对象和它的外部类对象之间有联系,那么可以将内部类声明为static。这通常称为嵌套类。
  6. 要想理解static应用于内部类是的含义,必须记住,成员内部类(普通内部类、常规内部类)对象隐含地保存了一个外部类对象的引用,指向创建它的外部类的对象。可是,静态内部类却不是这样。
  7. 嵌套类意味着:a、创建嵌套类的对象的时候,并不需要外部类的对象。b、嵌套内部类对象不能访问非静态的外部类对象。
package com.qs.innerclass;

class OuterClass {

    private static int a = 1;// 静态内部类可以访问
    private int b = 2;// 静态内部类不能访问

    public static void outerFuncOne() {// 静态内部类可以访问

    }

    public void outerFuncTwo() {// 静态内部类不能访问

    }

    public void outerFuncThree() {
        // 外部类访问静态内部类的静态成员(直接使用类名访问)
        System.out.println(StaticInnerClass.innerA);
        StaticInnerClass.innerFuncOne();
        // 外部类访问静态内部类的非静态成员(需要创建对象)
        System.out.println(new StaticInnerClass().innerB);
        new StaticInnerClass().innerFuncTwo();
    }

    static class StaticInnerClass {
        // 静态内部类中可以存在静态成员
        static int innerA = 3;
        int innerB = 4;

        static void innerFuncOne() {
            // 静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)
            System.out.println("outer.a : " + a);
            outerFuncOne();
        }

        void innerFuncTwo() {
            // 静态内部类不能访问外部类的非静态成员(包括静态变量和静态方法)
            // System.out.println("outer.b : " + b);
            // outerFuncTwo();
            System.out.println("innerFuncTwo");
        }

    }

}

public class StaticInner {
    public static void main(String[] args) {
        OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();
        inner.innerFuncOne();
        OuterClass outer = new OuterClass();
        outer.outerFuncThree();
    }

}

你可能感兴趣的:(java,java,java,内部类,静态内部类)