Java中本地内部类中的访问方法

Java中本地内部类中的访问方法,java,inner-classes,Java,Inner Classes,是否有任何方法可以访问Java中本地内部类的方法。下面的代码是我以前尝试过的示例代码。根据这一点,访问mInner()方法的机制是什么 class Outer{ int a=100; Object mOuter(){ class Inner{ void mInner(){ int y=200; System.out.println("mInner..");

是否有任何方法可以访问Java中本地内部类的方法。下面的代码是我以前尝试过的示例代码。根据这一点,访问
mInner()
方法的机制是什么

class Outer{
    int a=100;

    Object mOuter(){
        class Inner{
            void mInner(){
                int y=200;
                System.out.println("mInner..");
                System.out.println("y : "+y);
            }
        }
        Inner iob=new Inner();  
        return iob;
    }
}   
class Demo{
    public static void main(String args[]){
        Outer t=new Outer();
        Object ob=t.mOuter();
        ob.mInner(); // ?need a solution..
    }
}
局部类的作用域规则与变量的作用域规则几乎相同,也就是说,它仅限于封闭块

同样,您不能从
main
访问变量
iob
,也不能从
main
访问本地类
internal

在封闭块之外,本地类和匿名类之间没有区别。两者都无法访问。不同之处在于,在封闭块中,可以通过名称访问本地类,特别是在需要重复访问它(例如创建多个实例)的情况下


与封闭块外的本地/匿名类交互的唯一方法是通过相关类实现的任何超类或接口。

正如ILikeTau的评论所说,您无法访问在方法中定义的类。您可以在方法之外定义它,但另一种可能是定义
接口
(或抽象类)。然后代码仍然在方法中,并且可以访问方法中定义的
final
变量和参数(如果将整个类移到外部,则无法执行此操作)。比如:

class Outer {
    int a = 100;

    public interface AnInterface {
        void mInner();  // automatically "public"
    } 

    AnInterface mOuter() {   // note that the return type is no longer Object
        class Inner implements AnInterface {
            @Override
            public void mInner() {    // must be public
                int y = 200;
                System.out.println("mInner..");
                System.out.println("y : " + y);
            }
        }
        Inner iob = new Inner();  
        return iob;
    }
}   

class Demo {
    public static void main(String[] args) {  // the preferred syntax
        Outer t = new Outer();
        Outer.AnInterface ob = t.mOuter();
        ob.mInner(); 
    }
}
注:未经测试


请注意,返回类型和
ob
的类型已从
Object
更改。这是因为在Java中,如果将某个对象声明为
对象
,则只能访问为
对象
定义的方法。编译器必须在编译时(而不是在运行时)知道您的对象
ob
有一个
mInner
方法,并且它不能判断它是否只知道它是一个
对象。通过将其更改为
接口
,编译器现在知道它有一个
mInner()
方法。

要访问内部类,请创建内部类的对象

OuterClass.InnerClass innerObject = outerObject.new InnerClass();
从你的例子

outer t=new outer();

outer.inner inner1=t.new inner();

希望这对您有所帮助…

如果您无法访问在方法中定义的类,会出现什么错误。在方法之外定义它,您将能够访问它。线程“main”java.lang中出现异常。错误:未解决的编译问题:方法mInner()类型object的未定义是否可以将类Inner移动到方法外部?因为
Inner
不引用
Outer
的任何字段,也不引用
mOuter()
的任何变量,所以最好将类设为静态内部类。@JavaLearner您的答案适合访问常规内部类。它不适用于局部内部类。