黑马程序员-------private的保护层级

------- android培训java培训、期待与您交流! ----------

最近在自学Java.

前几天发现了一个长久以来一直忽略的问题。那就是private修饰的类的成员的保护只止步于类的范畴,而没到对象的级别。

在对某个类(就叫Student吧)的父类Object的equals方法进行重写时,

public boolean equals(Object obj) {
                Student s = (Student) obj;
                return this.name.equals(s.name) && this.age == s.age;
        }

编译顺利通过了。但是问题是,属性name和age是Student的私有成员。为什么s的私有成员可以直接调用了?

观察后猜测,也许是因为s 和 this 都是同一个类Student的对象。于是验证猜想,于是改为把参数obj强转成了父类Person。

public boolean equals(Object obj) {
                Person p = (Person) obj;
                return this.name.equals(p.name) && this.age == p.name;
        }
这下如愿以偿的报错了。name和age变为not visible了。

于是得出结论,private的保护层级是类的层级上的,而不是对象级的。
即:同一个类的不同对象之间,是可以任意访问对方的私有成员的。
这下private这个原来在我心中的神圣纯洁的形象瞬间崩塌了!嫂嫂,二郎我来了!

当回去翻书时发现,其实书上在这里的描述是严谨的,并没有错误。只是大多数书并没有强调这个对封装性破坏的隐患、

你可能感兴趣的:(黑马程序员-------private的保护层级)