龙空技术网

Java内部类与静态内部类的区别

运维开发木子李 34

前言:

眼前你们对“java中静态类和动态的区别”大概比较注意,各位老铁们都想要了解一些“java中静态类和动态的区别”的相关资讯。那么小编在网络上搜集了一些对于“java中静态类和动态的区别””的相关知识,希望看官们能喜欢,看官们一起来了解一下吧!

#头条创作挑战赛#

访问权限:

内部类可以访问外部类的私有成员,而静态内部类不能直接访问外部类的私有成员,需要通过外部类的实例或者静态方法来访问。

class OuterClass {    private int privateVariable = 10;    class InnerClass {        void accessOuterClass() {            System.out.println(privateVariable);        }    }    static class StaticInnerClass {        void accessOuterClass(OuterClass outer) {            System.out.println(outer.privateVariable);        }    }}
实例化方式:

内部类需要通过外部类的实例来实例化,而静态内部类可以直接实例化。

OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass();OuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();
静态性质:

内部类可以包含静态和非静态成员,而静态内部类只能包含静态成员。

class OuterClass {    private static int staticVariable = 10;    private int nonStaticVariable = 20;    class InnerClass {        static final int innerStaticVariable = 30;        int innerNonStaticVariable = 40;    }    static class StaticInnerClass {        static final int staticInnerStaticVariable = 50;        static int staticInnerNonStaticVariable = 60;    }}
外部类引用:

内部类可以直接访问外部类的实例,而静态内部类不持有外部类的引用。

class OuterClass {    private int variable = 10;    class InnerClass {        void accessOuterClass() {            System.out.println(variable);        }    }    static class StaticInnerClass {        void accessOuterClass() {            // 无法直接访问外部类的实例变量            // System.out.println(variable);        }    }}
生命周期:

内部类的生命周期与外部类的实例绑定,而静态内部类的生命周期独立于外部类的实例。

class OuterClass {    class InnerClass {        void printMessage() {            System.out.println("Inner class");        }    }    static class StaticInnerClass {        void printMessage() {            System.out.println("Static inner class");        }    }        void createInnerClassInstance() {        InnerClass inner = new InnerClass();        inner.printMessage();    }    static void createStaticInnerClassInstance() {        StaticInnerClass staticInner = new StaticInnerClass();        staticInner.printMessage();    }}OuterClass outer1 = new OuterClass();outer1.createInnerClassInstance(); // 输出:Inner classOuterClass.createStaticInnerClassInstance(); // 输出:Static inner class
匿名内部类:

内部类可以是匿名的,而静态内部类不能是匿名的。

interface Greeting {    void sayHello();}class OuterClass {    void greet() {        Greeting greeting = new Greeting() {            @Override            public void sayHello() {                System.out.println("Hello from inner class");            }        };        greeting.sayHello();    }}OuterClass outer = new OuterClass();outer.greet(); // 输出:Hello from inner class
外部类访问内部类:

外部类可以直接访问内部类,而静态内部类需要通过外部类的实例来访问。

class OuterClass {    class InnerClass {        void printMessage() {            System.out.println("Inner class");        }    }    static class StaticInnerClass {        void printMessage() {            System.out.println("Static inner class");        }    }        void accessInnerClass() {        InnerClass inner = new InnerClass();        inner.printMessage();    }    static void accessStaticInnerClass() {        StaticInnerClass staticInner = new StaticInnerClass();        staticInner.printMessage();    }}OuterClass outer = new OuterClass();outer.accessInnerClass(); // 输出:Inner classOuterClass.accessStaticInnerClass(); // 输出:Static inner class
类型声明:

内部类可以是抽象类或接口的子类,而静态内部类不能是抽象类或接口的子类。

abstract class AbstractClass {    abstract void printMessage();}interface Interface {    void printMessage();}class OuterClass {    class InnerClass extends AbstractClass {        @Override        void printMessage() {            System.out.println("Inner class");        }    }    static class StaticInnerClass {        // 无法继承抽象类或实现接口        // class SubClass extends AbstractClass {}        // class SubClass implements Interface {}    }}OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass();inner.printMessage(); // 输出:Inner class
外部类实例化:

内部类可以直接实例化外部类的实例,而静态内部类不可以实例化外部类的实例。

class OuterClass {    class InnerClass {        void printMessage() {            System.out.println("Inner class");        }    }    static class StaticInnerClass {        void printMessage() {            System.out.println("Static inner class");        }    }}OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass();inner.printMessage(); // 输出:Inner classOuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();staticInner.printMessage(); // 输出:Static inner class
外部类静态成员访问:

内部类可以直接访问外部类的静态成员,而静态内部类也可以直接访问外部类的静态成员。

class OuterClass {    private static int staticVariable = 10;    class InnerClass {        void accessOuterClass() {            System.out.println(staticVariable);        }    }    static class StaticInnerClass {        void accessOuterClass() {            System.out.println(staticVariable);        }    }}OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass();inner.accessOuterClass(); // 输出:10OuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();staticInner.accessOuterClass(); // 输出:10

标签: #java中静态类和动态的区别