//Orc.java
class Villain{
  private String name;
  protected void set(String nm){name=nm;}
  public Villain(String name){this.name=name;}
  public String toString(){
    return "I'm a villain and my name is"+name;
  }
}
public class Orc extends Villain{
   private int orcNumber;
   public Orc(String name,int orcNumber){
    super(name);
    this.orcNumber=orcNumber;
   }   public void change(String name,int orcNumber){
        
set(name);
---------------------------
        this.orcNumber=orcNumber;      }
public String toString(){
  return "Orc"+orcNumber+":"+super.toString();
}
public static void main(String s[]){
  Orc orc=new Orc("Limburger",12);
  System.out.println(orc);
  orc.change("Bob",19);
  System.out.println(orc);
}
}
输出结果Orc 12:i'm a Villain and my name is Limburger
        Orc 19'm a Villain and my name is Bob
父类的私有成员不能被子类继承,画下划线那条代码该怎么解释???

解决方案 »

  1.   

    "父类的私有成员不能被子类继承".你说的没错,这里并没有直接使用成员,而是通过setName()方法来访问的,而setName()是protected的,不知道你理解不理解protected的意思呢?是它的子类,同一个包内的类对象都可以访问有protected修饰的方法.
      

  2.   

    真是一种设计模式,一个类中的变量尽量采用private ,然后写set(),get()函数,外界访问其变量时,就可以通过seter,geter函数来设置和得到其变量,不知道明白否?
      

  3.   

    protected设计就是让子类可访问的,基类提供一个protected接口让子类间接操作基类的私有成员,而不是通过直接方式.
      

  4.   

    protected void set(String nm){name=nm;}set(name);
    ---------------------------
    你是不是看错了
    set() 是 protected  是可以被子类访问的如果这样:private void set(String nm){name=nm;}
    那么子类就不能访问了
      

  5.   

    name 是Villain类的专有属性,此程序通过子类继承父类的接口(必须是父类的公共接口)来设置他的值
    是这么回事吗?????????
      

  6.   

    name 是Villain类的专有属性,此程序通过子类继承父类的接口(必须是父类的公共接口)来设置他的值
    是这么回事吗?????????就这个程序来说,这句话是对的。因为name是private修饰的。而setName()是public的。
      

  7.   

    这个是继承与组合的区别了
    如果子类和父类的关系是"is a",则采用继承,而是"has a"的关系则采用组合.
    因为要尽量满足开闭原则