如何使用当前包的内部类

时间:2011-02-25 14:52:18

标签: java inner-classes

我有一个内部类,它存在于一个方法中,这个类有一个方法。

我想使用当前包之外的内部类方法中存在的方法。 你能建议我怎么用吗?

package com.a3.local;
public class OuterClass
{
    public void outerMethod()
    {
        class InnerClazz
        {
            public void wakeUp()
            {
                System.out.println("Good Morning");
            }
        }
    }
}

6 个答案:

答案 0 :(得分:2)

正如其他人解释的那样,你可以访问你的方法本地定义的内部类(使用interface =>参见其他答案)。

无论如何,我认为这不是定义方法本地类的目的。

答案 1 :(得分:2)

我们可以访问包外的内部类方法。 我们需要创建一个Outerclass实例,然后使用外部类创建一个内部类的实例。之后我们可以称之为。

教程中的代码:http://www.oursland.net/tutorials/java/innerclasses/



    public class InnerClassTest {
        public void foo() {
            System.out.println("Outer class");
        }

        public class ReallyInner {
            public void foo() {
                System.out.println("Inner class");
            }

            public void test() {
                this.foo();
                InnerClassTest.this.foo();
            }
        }

        public static void main(String[] args) {
            InnerClassTest o = new InnerClassTest();
            InnerClassTest.ReallyInner i = o.new ReallyInner();
            i.test();

答案 2 :(得分:1)

如果在方法中定义内部类,则调用其方法(不进行反射)需要:

  • 该类实现调用者可访问的接口。
  • 调用者可以访问该类的实例。

http://java.sun.com/new2java/divelog/part5/page5.jsp有一个例子。

答案 3 :(得分:1)

据我所知,代码如下:

class Outer
{
  public void someMethod()
  {
    class Inner{
      public void methodThatShouldBeVisibleOutside() {}
    }
  }
}

唯一的方法是让Inner类实现一个公开可见的接口'InnerInterface'并返回Inner类的实例并调用methodThatShouldBeVisibleOutside

public InnerInterface someMethod()
{
  class Inner implements InnerInterface()
  {
    @Override
    public void methodThatShouldBeVisibleOutside() {}
  }
  return new Inner();
}

然后

new Outer().someMethod().methodThatShouldBeVisibleOutside();

答案 4 :(得分:0)

你的类必须是public并且有一个名字并且在类体中定义,而不是在一个方法中,你可以直接在其他包中使用它,而不是仅仅通过它的基础使用它类型或其中一种接口类型。

如果您有一个定义内部mypackage.Outer的类class Inner,则可以使用名称mypackage.Outer.Inner引用该类,并将其导入为正常以缩短名称。

如果它是静态的,您可以使用new mypackage.Outer.Inner(...)创建它。

如果它不是静态的,则必须使用不同的语法来创建它们:myOuterInstance.new mypackage.Outer.Inner(...)

答案 5 :(得分:0)

首先,您的内部类必须具有公共可见性并且是静态的。

然后,有两种可能性:

  1. 您想要调用内部类的静态方法
  2. 您想在内部类的实例上调用方法
  3. 在第一种情况下,如果可见性设置正确,您只需执行以下操作:

    OuterClass.InnerClass.myStaticMethod()
    

    在seconde类中,您必须提供一种方法来检索内部类的实例,并且只需在实例上调用该方法,就像使用任何其他方法一样。

    也可以在非静态内部类上调用方法,但这更复杂。代码片段在这里真的很有帮助;)

    希望这有帮助。