A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小聪 中级黑马   /  2012-12-23 19:03  /  1450 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Outer {
        public void fun() {
                System.out.println("Outer");
        }

        class Inner {
                public void fun() {
                        System.out.println("Inner");
                }

                public void test() {
                        Outer.this.fun();
//            fun();
//            this.fun();
                }
        }

        public void test() {
                Inner inner = new Inner();
                inner.test();
        }
}

public class Test {
        public static void main(String[] args) {
                Outer o = new Outer();
                o.test();
        }
}
这段代码代表的是什么啊?最后的o.test()是什么啊?

4 个回复

倒序浏览
内部类问题,外部类的test()方法中有Inner inner = new Inner(),实例化了一个内部类对象,
inner.test()调用了内部类的test()方法,然后找到这个内部类test()方法,
里面是Outer.this.fun(),这个就是调用的外部类的fun()方法而不是内部类的fun()方法,所以打印结果为“Outer”
回复 使用道具 举报
Outer o = new Outer();实例化外部类,
o.test();调用外部类的test方法,在些方法中(Inner inner = new Inner();)又实例化了内部类
然后调用(inner.test();)内部类的方法,在些方法中(Outer.this.fun();)外部类的fun方法,所以打印的是Outer
回复 使用道具 举报
这段代码分为以下几部分看。
回复 使用道具 举报
呃。刚才发错了。重新发下:

这段代码分为以下几部分看。
1.你首先创建了一个外部类。写了一个方法,打印outer。你在外部类里创建了一个内部类,并且写了一个方法,打印inner;然后又写了一个方法test();方法体是用外部类调用外部类的fun()方法,即调用这个方法打印Outer。这里的this指的是外部类的Fun()方法;
2你又在外部类里写了一个方法test()。你在这个方法里创建内部类对象。并且调用内部类的test()方法。
3你写了一个主函数类。创建外部类对象。调用外部类的test()方法。这时候创建内部类对象。调用内部类的test()方法。这时候就会执行Outer.this.fun()这个语句。这时候就会调用外部类的Fun方法。所以最后打印Outer。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马