对protected的正确理解是:protected成员可以被其所在类的所有子类所访问(在子类中),但它对于包外代码的任意访问仍然是受保护的。上面这个例子不是用来说明protected的效果的。而是用来说明下面这个问题的:
是句柄变量的类型——而不是他指向的对象的类型——决定了他可以访问哪些成员。
例如上面的例子中,sp虽然指向了sc,但他所访问的并不是对象sc的类Subclass中的x,而是句柄sp本身类型Superclass中的x。

解决方案 »

  1.   

    不知道你所说的隐藏是在哪一部分提出的概念?
    我是这么理解的:
    封装就是指隐藏对象中的数据或方法。变量隐藏是说限制对对象中的变量的直接访问,而是应该通过对象中的相应方法来间接地访问。同时还应注意在定义成员变量时,应给与适当的访问权限。例如:
    public class Employee{
      protected int employeeID;  public int getEmployeeID(){
        return employeeID;
      }  public int setEmployeeID(int id){
        employeeID = id;
      }
    }
    这样,employeeID对于包外的代码来说就被隐藏了(不能直接访问),但可以通过getEmployeeID()和setEmployeeID()方法来访问。
      

  2.   

    这时我给一个朋友的例子。没想到搂主拿来问了,在搞人面前我不好多说什么,只是这里得隐藏,不是和protected有关,而是和继承关系有关的,你应该在这方面下功夫,具体的理解,以及准确的回答我会今天晚上查到了,贴出来的。