Nested Class一般是C++的说法,Inner Class一般是Java的说法,指的是同一意思。
内部类分为静态内部类和非静态内部类。
静态内部类中可以包含静态成员,非静态内部类中不可以包含静态成员。
静态内部类中不能引用外部类中的实例成员。非静态内部类则没有这个限制。
在Java中,静态嵌套类(Static Nested Class)和内部类(Inner Class)是两种不同的类类型,它们之间存在一些重要的差异。以下是它们之间的主要区别和示例:
定义方式:
静态嵌套类:使用static关键字定义,可以直接通过类名访问,不需要外部类的实例。
内部类:定义在另一个类的内部,不使用static关键字。它需要外部类的实例才能被访问。
实例化方式:
静态嵌套类:可以直接通过类名进行实例化,不需要外部类的实例。
内部类:需要先创建外部类的实例,然后通过这个实例来创建内部类的实例。
访问权限:
静态嵌套类:可以直接访问外部类的静态成员和静态方法。
内部类:可以直接访问外部类的非静态成员,但是只能通过外部类的实例来访问外部类的静态成员和静态方法。
示例:
java
class OuterClass {
static class StaticNestedClass {
void display() {
System.out.println("Static Nested Class");
}
}
class InnerClass {
void display() {
System.out.println("Inner Class");
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass.StaticNestedClass staticNestedObj = new OuterClass.StaticNestedClass();
staticNestedObj.display(); // 输出 "Static Nested Class"
OuterClass outerObj = new OuterClass();
OuterClass.InnerClass innerObj = outerObj.new InnerClass(); // 创建内部类对象需要外部类实例
innerObj.display(); // 输出 "Inner Class"
}
}
在这个例子中,OuterClass包含一个静态嵌套类StaticNestedClass和一个内部类InnerClass。在main方法中,我们分别创建了StaticNestedClass和InnerClass的实例,并调用了它们的display方法。可以看到,创建StaticNestedClass的实例不需要OuterClass的实例,而创建InnerClass的实例则需要先创建OuterClass的实例