2013-06-26 194 views
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中的method1。還有method1中的method2。如何從外部類中調用其他子類的子類

+0

'新Test.M2() .method1()'和'new Test()。method2()' – johnchen902

+0

沒有M2的實例,我認爲你也需要把method1設置爲static。 –

回答

2

方法1調用方法2,你必須創建Test類的實例,因爲你在靜態方面是內部方法1

new Test().method2(); 


,並呼籲 方法1主要

new Test.M2().method1(); 

因爲,M2,是一個嵌套類,可以直接訪問它的外部類的名字 - 測試。如果這是一個內部類,你必須創建Test一個實例來訪問它:

new Test().new M2().method1(); 
+0

感謝Rohit Jain。它爲我工作:) –

+0

@ user2524535。不客氣:) –

0

像往常一樣,爲了調用非靜態方法,您需要一個實例來調用它。可以使方法靜態或創建類的實例。這裏是如何讓你的代碼working一個選項:

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(); 
    } 
} 
2

從方法2調用方法一很簡單:

new M2().method1(); 

由於靜態內部類是相當多普通班。

但是,由於內部類是靜態的,它不對應於外部類的任何實例,並且由於method2不是靜態的,所以它必須在實例上調用,因此沒有直接調用該方法的方法,您仍然需要外部類的一個實例調用的方法:

new Test().method2(); 
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(); 
} 

}

+0

+ 1.它的工作完美。但OP期待一些解釋,爲什麼它工作:) –