private引起的反思

来源:互联网 发布:北航软件学院书记 编辑:程序博客网 时间:2024/04/28 18:13

     今天写程序的时候突然遇到这样的问题,在类中定义了如下的变量: private String name;

在其他类中new了一个对象之后,想用对象.name取得这个属性,但是却访问不到,到群里去问,引来的是一片鄙视!!

呵呵,之后自己也感到惭愧,学了这么久Java了,竟然这个还没理解清除,之前总是拿private、public、protected来比,好像是懂了,现在才发现有点笑话的意思。

    现在来分析一下我出错的原因吧。我是这样理解的,这个属性是private的,说明只有这个类的对象可以访问,其他外部实例都不能访问。自己理解是这样的,但是发现自己真的是大错特错:首先外部实例不能访问是什么概念?这个类的对象可以访问又是什么概念?“只有这个类的对象可以访问”是导致我理解出错的原因,我是这样想的:对啊,这个属性是私有的,外部不能访问,但是它也是成员变量啊,我new出来的对象当然有这个成员变量了,当然就可以用上面的方式访问了。那么,问你,外部实例不能访问是指什么,是不能用“外部对象.属性”来访问吗?哈哈,好像我是这样理解的,真的是大错特错啊,只要一个类提供了不是private的构造方法,那么任何其他类的实例都可以new出一个对象,进而访问到它的属性,也就是在这个层面上你不可能阻止别人访问你的属性,那么如果不想这个属性被别的对象访问怎么办,办法就是设为private,设成这样了当然就不可能通过"对象.属性"的方式访问了,如果可以访问,设为私有有什么用,这样设的话,如果没有一个pulic的getter方法,即使你得到了类的对象,你也访问不到对象内的属性。

   我觉得这个private说成“对外部用户不透明,只能自己拥有”,有点没解释清楚,我觉得这样理解比较好“pirvate说明只能在类中访问,如果你没提供一个访问我的public访问,你永远都不户看到我,即时你拥有外层包装我的对象实例”.

原创粉丝点击