黑马程序员技术交流社区

标题: 匿名内部类的问题 [打印本页]

作者: 马德强    时间: 2011-12-23 14:58
标题: 匿名内部类的问题
本帖最后由 马德强 于 2011-12-23 20:14 编辑
  1. public class TestInner
  2. {
  3.         private  String name;

  4.         TestInner(String name) {
  5.                 this.name = name;
  6.         }

  7.         private String getName() {
  8.                 return name;
  9.         }

  10.         private void show() {
  11.                 new TestInner("show") {
  12.                         void print() {
  13.                                 System.out.println(getName());
  14.                         }
  15.                 }.print();
  16.         }

  17.         public static void main(String[] args) {
  18.                 new TestInner("main").show();
  19.         }
  20. }
复制代码
这段代码运行结果为什么是main,而不是show?

请帮助解释下
作者: yunqiangshan    时间: 2011-12-23 16:05
你那句输出语句其实是   System.out.println(TestInner.this.getName());的简写,所以输出是main
作者: 方书堂    时间: 2011-12-23 17:02
因为你把getName私有化了,所以System.out.println(getName)中的getName就相当于TestInner.this.getname.
你getName私有化了所以匿名内部类就没有本类中的获取name 的方法,只能访问外部类的getName的,因为他还持有外部类的引用,所以输出的是mian。你把private去掉的话,那么getName就相当于this.getName.输出的就是show了
作者: 马德强    时间: 2011-12-23 20:13
方书堂 发表于 2011-12-23 17:02
因为你把getName私有化了,所以System.out.println(getName)中的getName就相当于TestInner.this.getname.
...

正解:原因是私有成员不会被继承。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2