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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马德强 黑马帝   /  2011-12-23 14:58  /  1634 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马德强 于 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?

请帮助解释下

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

3 个回复

倒序浏览
你那句输出语句其实是   System.out.println(TestInner.this.getName());的简写,所以输出是main
回复 使用道具 举报
因为你把getName私有化了,所以System.out.println(getName)中的getName就相当于TestInner.this.getname.
你getName私有化了所以匿名内部类就没有本类中的获取name 的方法,只能访问外部类的getName的,因为他还持有外部类的引用,所以输出的是mian。你把private去掉的话,那么getName就相当于this.getName.输出的就是show了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
方书堂 发表于 2011-12-23 17:02
因为你把getName私有化了,所以System.out.println(getName)中的getName就相当于TestInner.this.getname.
...

正解:原因是私有成员不会被继承。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马