【问题标题】:How can I access inner class methods directly from other class in Java? [closed]如何直接从 Java 中的其他类访问内部类方法? [关闭]
【发布时间】:2021-09-17 10:05:40
【问题描述】:

我已经实现了两个这样的接口:

public OuterClass implements Interface1 {

    public InnerClass implements Interface2 {

    }
} 

如何直接从 Java 中的其他类访问内部类方法? Java允许吗?

【问题讨论】:

  • 请提供更多细节:您尝试了什么?
  • 当然。大多数Iterators 被实现为内部类。
  • 您必须将内部类设为静态才能使用 OuterClass 以外的其他类中的 InnerClass。然后你可以使用OuterClass.Innerclass innerClass = new OuterClass.InnerClass();

标签: java oop interface inner-classes


【解决方案1】:

当你在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

由于内部类不是静态的,您需要一个OuterClass 的实例来创建InnerClass 的实例,您可以在该实例上调用您的方法。

如果将内部类设为静态,也可以在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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    相关资源
    最近更新 更多