发布网友 发布时间:2023-07-05 09:49
共2个回答
热心网友 时间:2024-11-14 17:55
你是说静态内部类吗?热心网友 时间:2024-11-14 17:56
一、非静态内部类:
1、变量和方法不能声明为静态的。(类的编译顺序:外部类–静态方法或属性–内部类,如果内部类声明为静态的,造成编译顺序冲突。个人理解)
2、实例化的时候需要依附在外部类上面。比如:B是A的非静态内部类,实例化B,则:A.B b = new A().new B();
3、内部类可以引用外部类的静态或者非静态属性或者方法。
二、静态内部类:
1、属性和方法可以声明为静态的或者非静态的。
2、实例化静态内部类:比如:B是A的静态内部类,A.B b = new A.B();
3、内部类只能引用外部类的静态的属性或者方法。
4、如果属性或者方法声明为静态的,那么可以直接通过类名直接使用。比如B是A的静态内部类,b()是B中的一个静态属性,则可以:A.B.b();
区别:
(1)内部静态类不需要有指向外部类的引用。但非静态内部类需要持有对外部类的引用。
(2)非静态内部类能够访问外部类的静态和非静态成员。静态类不能访问外部类的非静态成员。他只能访问外部类的静态成员。
(3)一个非静态内部类不能脱离外部类实体被创建,一个非静态内部类可以访问外部类的数据和方法,因为他就在外部类里面。