前言:
眼前你们对“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中静态类和动态的区别