如何直接从 Java 中的其他 class 访问内部 class 方法?
How can I access inner class methods directly from other class in Java?
我实现了两个这样的接口:
public OuterClass implements Interface1 {
public InnerClass implements Interface2 {
}
}
如何直接从 Java 中的其他 class 访问内部 class 方法?在 Java 中是否允许?
当你在 InnerClass
中定义一个方法时,你需要有一个 InnerClass
的实例来调用它的(非静态)方法。所以我们向您的示例添加一个简单的方法...
public class OuterClass implements Interface1 {
public class InnerClass implements Interface2 {
public void method() {
System.out.println("hello");
}
}
}
... 创建 InnerClass
的实例并调用如下方法:
public static void main(String[] args) {
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.method();
}
// output: hello
由于内部 class 不是静态的,您需要一个 OuterClass
的实例来创建 InnerClass
的实例,您可以在该实例上调用您的方法。
如果将内部class设为静态,也可以在InnerClass
中定义静态方法:
public class OuterClass implements Interface1 {
public static class InnerClass implements Interface2 {
public void method() {
System.out.println("hello");
}
public static void staticMethod() {
System.out.println("static");
}
}
}
在这种情况下,您不需要 OuterClass
的实例来构造 InnerClass
的实例,因为它是静态可用的并且未绑定到实例。此外,您可以在没有 InnerClass
:
实例的情况下调用内部 class 的静态方法
// call static method without any instance
OuterClass.InnerClass.staticMethod();
// create instance of inner class without instance of outer class
OuterClass.InnerClass inner = new OuterClass.InnerClass();
inner.method(); // call method of inner class
// output: static
hello
我实现了两个这样的接口:
public OuterClass implements Interface1 {
public InnerClass implements Interface2 {
}
}
如何直接从 Java 中的其他 class 访问内部 class 方法?在 Java 中是否允许?
当你在 InnerClass
中定义一个方法时,你需要有一个 InnerClass
的实例来调用它的(非静态)方法。所以我们向您的示例添加一个简单的方法...
public class OuterClass implements Interface1 {
public class InnerClass implements Interface2 {
public void method() {
System.out.println("hello");
}
}
}
... 创建 InnerClass
的实例并调用如下方法:
public static void main(String[] args) {
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.method();
}
// output: hello
由于内部 class 不是静态的,您需要一个 OuterClass
的实例来创建 InnerClass
的实例,您可以在该实例上调用您的方法。
如果将内部class设为静态,也可以在InnerClass
中定义静态方法:
public class OuterClass implements Interface1 {
public static class InnerClass implements Interface2 {
public void method() {
System.out.println("hello");
}
public static void staticMethod() {
System.out.println("static");
}
}
}
在这种情况下,您不需要 OuterClass
的实例来构造 InnerClass
的实例,因为它是静态可用的并且未绑定到实例。此外,您可以在没有 InnerClass
:
// call static method without any instance
OuterClass.InnerClass.staticMethod();
// create instance of inner class without instance of outer class
OuterClass.InnerClass inner = new OuterClass.InnerClass();
inner.method(); // call method of inner class
// output: static
hello