基本使用
java
允许我们在一个类里面定义静态类。比如内部类(nested class)
。把内部类(nested class)
封闭起来的类叫外部类。在java
中,我们不能用static修饰顶级类(top level class)。只有内部类修饰为static。
静态内部类和非静态内部类与外部类怎么相互调用呢?下面列出基本使用情景:
- 外部类访问内部类成员:
- 一个
非静态内部类
不能脱离外部类实体被创建(通过new 外部类().内部类()去创建)并访问。 静态内部类
可以直接创建(通过new 外部类.内部类()去创建)并访问
- 一个
class OuterClass {
public static class NestedStaticClass {
public void printMessage() {
}
}
public class InnerClass {
public void display() {
}
}
// 怎么创建静态内部类和非静态内部类的实例
public static void main(String args[]) {
// 创建静态内部类的实例
OuterClass.NestedStaticClass printer = new OuterClass.NestedStaticClass();
// 执行静态内部类的非静态方法
printer.printMessage();
// 为了创建非静态内部类,我们需要外部类的实例
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
// 调用非静态内部类的非静态方法
inner.display();
// 我们也可以结合以上步骤,一步创建的内部类实例
OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();
// 同样我们现在可以调用内部类方法
innerObject.display();
}
}
- 内部类访问外部类成员:
非静态内部类
能够访问外部类的静态和非静态成员。静态类
它只能访问外部类
的静态成员,不能访问外部类的非静态成员。
package oakHybridCacheWithDBData;
class OuterClass {
private static String staticMsg = "staticMsg";
private String msg = "msg";
// 静态内部类
public static class NestedStaticClass {
// 静态内部类只能访问外部类的静态成员
public void printMessage() {
// compiler success
System.out.println("Message from nested static class: " + staticMsg);
// compiler error
System.out.println("Message from nested static class: " + msg);
}
}
// 非静态内部类
public class InnerClass {
// compiler success
public void display() {
System.out.println("Message from non-static nested class: " + msg);
}
}
}