2012-04-20 50 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"); 
    } 
}