//今天好奇写了一个内部类,想调用外部同名方法,大家有啥办法没?
//注:平时虽然很少这种写法,纯属好奇,看看咋解决。public class ClassTest {
private void wai(){
System.out.println("外部方法");
}
private void tong(){
System.out.println("同一个方法,外部");
}
class NeiClass{
private void nei(){
System.out.println("内部方法");
}
private void tong(){
System.out.println("同一个方法,内部");
}
public void out(){
this.nei();
this.tong();
wai();//外部方法不能加 this
tong();//我这里要调用外部同名方法怎么办呢?
}
} public  void test(){
NeiClass n = new NeiClass();
n.out();
}
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
new ClassTest().test(); }}

解决方案 »

  1.   

    ClassTest.this.tong();//我这里要调用外部同名方法怎么办呢?java -cp . ClassTest
    内部方法
    同一个方法,内部
    外部方法
    同一个方法,外部
      

  2.   

    To :huntor哥们神人啊。那本书上就介绍这个知识点啊。我咋从没看到地方介绍过。嘿嘿
     
      

  3.   

    你这种设计应该极力避免,这是很不好的设计,作为语法学习知道了就可以了public class ClassTest {
        private void wai(){
            System.out.println("外部方法");
        }
        private void tong(){
            System.out.println("同一个方法,外部");
        }
        class NeiClass{
            private void nei(){
                System.out.println("内部方法");
            }
            private void tong(){
                System.out.println("同一个方法,内部");
            }
            public void out(){
                this.nei();
                this.tong();
                wai();//外部方法不能加 this
                ClassTest.this.tong();//我这里要调用外部同名方法
            }
        }    public void test(){
            NeiClass n = new NeiClass();
            n.out();
        }
        /**
         * @param args
         */
        public static void main(String[] args) {
    // TODO Auto-generated method stub
            new ClassTest().test();    }}
      

  4.   

    ClassTest.this.tong();参考:http://tieba.baidu.com/i/76242991/p/121833020,这里内部类讲的很详细~
    LZ有时间看看~
      

  5.   

    顺便补充一点:内部局部类访问变量,必须要加 finalpublic class ClassTest {
        public void test(){
            int a=5;
            final int b=10;
            class Neibu{
                void nout(){
                   System.out.println("Inner's m1()"+a);    //编译报错
                     System.out.println("Inner's m1() "+b);   //编译通过            
                }
            }
        }}