0
class Test {
    void method2() {
        System.out.println("This is outer class method");
    }


    static class M2 {
        void method1() {
            System.out.println("This is method1 in class m2");
        }
    }


    public static void main(String[] args){
        //test a=new test();
        //a.method2();
    }
}

我想从主类调用 M2 类中的方法 1。还有method1中的method2。

4

4 回答 4

2

从 method2 调用 method1 很简单:

new M2().method1();

因为静态内部类几乎是一个常规类。

但是,由于内部类是静态的,它不对应外部类的任何实例,并且由于method2不是静态的,它必须在实例上调用,所以没有直接调用该方法的方法,你仍然需要一个实例调用方法的外部类:

new Test().method2();
于 2013-06-26T14:33:08.920 回答
2

要从method1调用method2,您必须创建一个类的实例,因为您处于method1内的静态上下文中。Test

new Test().method2();


并从main 调用method1

new Test.M2().method1();

由于 ,M2是一个嵌套类,您可以直接在外部类名 - Test上访问它。如果它是一个内部类,你将不得不创建一个实例Test来访问它:

new Test().new M2().method1();
于 2013-06-26T14:35:23.573 回答
1

这对你有用

public class Test{
void method2(){
    System.out.println("This is outer class method");
}

static class M2{
    void method1(){
        System.out.println("This is method1 in class m2");
    }
}

public static void main(String[] args){       
    M2 m2=new M2();
    m2.method1();
}

}

于 2013-06-26T14:39:01.387 回答
0

像往常一样,为了调用非静态方法,您需要一个实例来调用它。将方法设为静态或创建类的实例。这是有关如何使您的代码正常工作的一种选择:

import java.util.*;
import java.lang.*;

class main{
    static void method2(){
        System.out.println("This is outer class method");
    }

    static class M2{
        static void method1(){
            System.out.println("This is method1 in class m2");
            method2();
        }
    }

    public static void main(String[] args){
        M2.method1();
        //test a=new test();
        //a.method2();
    }
}
于 2013-06-26T14:32:31.453 回答