为了账号安全,请及时绑定邮箱和手机立即绑定

前面不是说“可以直接访问 Outer 类中的私有属性a”,后面做题时为什么访问外部类的私有属性要用HelloWord.this.name

public class HelloWorld{
    
    //外部类的私有属性name
    private String name = "imooc";
    
    //外部类的成员属性
    int age = 20;
    
    //成员内部类Inner
    public class Inner {
        String name = "爱慕课";
        //内部类中的方法
        public void show() {

          //访问私有属性

            System.out.println("外部类中的name:" +HelloWorld.this.name );
            System.out.println("内部类中的name:" +name);

            System.out.println("外部类中的age:" + age);
        }
    }
    
    //测试成员内部类
    public static void main(String[] args) {
        
        //创建外部类的对象
        HelloWorld o = new HelloWorld ();
        
        //创建内部类的对象
        Inner inn =o.new Inner();
        
        //调用内部类对象的show方法
        inn.show();
    }
}

正在回答

3 回答

很简单嘛,就是因为内部类中有一个 name,而外部类中有一个name,为了以示区分,所以这样定义,来用this 调用外部类中的私有属性

如果内部类中没有name这个属性,那你直接用name 来调用外部类中的属性,或者还是用题目给的HelloWorld.this.name都是可以的,但是推荐直接用name来调用,更简洁!

0 回复 有任何疑惑可以回复我~
#1

慕虎2419999 提问者

非常感谢!
2017-11-12 回复 有任何疑惑可以回复我~

那个说为了以示区分的兄弟你表述不太准确,是因为当内部类中定义了name属性,外部类中也同时定义名字相同的name属性的时候,如果写成  System.out.println("外部类中的name:" +name ); 和 System.out.println("内部类中的name:" +name);    最后得到的都是内部类中的name的值。即在内部类和外部类的属性出现同名的情况下,直接获取最后获取到的默认是内部类中的属性的值。所以这时候需要用HelloWorld.this.name来获取外部类的值

1 回复 有任何疑惑可以回复我~
#1

qq_寒雨冷月樱花_0

有道理
2018-01-29 回复 有任何疑惑可以回复我~

....

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

前面不是说“可以直接访问 Outer 类中的私有属性a”,后面做题时为什么访问外部类的私有属性要用HelloWord.this.name

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号