确实啊
只有private才是完全不可见的,所以封装在里面了
举个例子
class Base {
protect String a;
public method() {
..
}
}
这时如果是一个封装得很好的类,那么这个类对外的接口只有method()方法
但是里面的protect成员还是可以访问到的
现在其实我就可以继承这个类,没有任何理由,我的子类不是因为实现多态,不是因为想使用这个类给子类的通用方法,我纯粹就是为了访问这个protect方法
class Child extends Base {
public xxx() {
a="xxx";
}
}
就是这样了,子类就通过这样的方法破坏了父类的封装
也就是说随便一个类都可以访问这个字符串了

解决方案 »

  1.   

    子类可以看到超类的protected变量,但是在超类的单独一个实例中却看不到。即破坏,又提供了保护,有点难理解。
      

  2.   

    java.web.net 欢迎大家加入一起读者讨论
    只加高手.和喜欢java jsp 的朋友.
    不经常在线的请不要加.
    群1:4181313
    群2:7346044希望通过大家的相互讨论能更丰富自己的知识.诚加诚心学习,和深入java 的朋友加入!!
      

  3.   

    to:jFresH_MaN
    我想问的是,你定义的子类中a="xxx";这个a是不是子类实例中的字段?如果是有何来破坏父类的封装性呢,我在父类中定义PROTECTED字段本来就是想让子类能够直接用它。