我有一个内部类,它存在于一个方法中,这个类有一个方法。
我想使用当前包之外的内部类方法中存在的方法。 你能建议我怎么用吗?
package com.a3.local;
public class OuterClass
{
public void outerMethod()
{
class InnerClazz
{
public void wakeUp()
{
System.out.println("Good Morning");
}
}
}
}
答案 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)
如果在方法中定义内部类,则调用其方法(不进行反射)需要:
答案 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)
首先,您的内部类必须具有公共可见性并且是静态的。
然后,有两种可能性:
在第一种情况下,如果可见性设置正确,您只需执行以下操作:
OuterClass.InnerClass.myStaticMethod()
在seconde类中,您必须提供一种方法来检索内部类的实例,并且只需在实例上调用该方法,就像使用任何其他方法一样。
也可以在非静态内部类上调用方法,但这更复杂。代码片段在这里真的很有帮助;)
希望这有帮助。