2012-04-20 46 views
-2

我有一個樣本代碼來解決其基於inner類:益智上內部類和類隱藏

package inner; 

class A { 
    void m() { 
     System.out.println("Outer"); 
    } 
} 

public class TestInner { 
    public static void main(String[] args) { 
     new TestInner().go();  
    } 

    private void go() { 
     new A().m(); 
     class A{ 
      void m(){ 
       System.out.println("Inner"); 
      } 
     } 
     new A().m(); 
    } 
    class A{ 
      void m(){ 
      System.out.println("Middle"); 
     } 
    } 
} 

通過上述示例代碼給出的輸出爲:

Middle 
Inner 

我的問題是,鑑於我不想使用包名稱來創建對象,我如何打印輸出爲:

Outer 
Inner 
+4

你有2個小時。沒有拼寫錯誤。 – sp00m 2012-04-20 08:00:32

+0

當且僅當從現在起絕對必要時,請使用粗體。 – Lion 2012-04-20 08:02:08

+0

這是一個非常人爲的難題,我沒有看到它的有趣之處,因爲它只是關於命名空間。在編譯單元中遇到第二個包 - 私有類之前,您將不得不查看幾百萬行生產級Java。 – 2012-04-20 09:13:54

回答

0

由於使用包很明顯是答案,我假設你正在尋找一些鈍角。

您可以添加一個外部類並調用它。

class B extends A { } 

// in TestInner.go() 
    new B().m(); 
    class A{ 
     void m(){ 
      System.out.println("Inner"); 
     } 
    } 
    new A().m(); 
+3

我有一個更好的:'System.out.println(「Outer \ nInner」);'這是一個很好的答案:) – 2012-04-20 09:16:05

0
public class TestInner { 
public static void main(String[] args) { 
    new TestInner().go();  
} 

private void go() { 
    new inner.A().m();  //will produce output "Outer" 
    class A{ 
     void m(){ 
      System.out.println("Inner"); 
     } 
    } 
    new A().m();    //will produce output "Inner" 
} 
class A{ 
     void m(){ 
     System.out.println("Middle"); 
    } 
}