我发表一下我的拙见:
由于Detergent是从Cleaner继承而来,可否这样认为:
public class Detergent extends Cleanser {
  // Change a method:
  public void scrub() {
    append(" Detergent.scrub()");
    super.scrub(); // Call base-class version
private String s = new String("Cleanser");
  
  public void append(String a) { s += a; }
  
  public void dilute() { append(" dilute()"); }
  
  public void apply() { append(" apply()"); }
  
  public void scrub() { append(" scrub()"); }
  
  public void print() { System.out.println(s); }
  
  public static void main(String[] args) {
    Cleanser x = new Cleanser();
    x.dilute(); x.apply(); x.scrub();
    x.print();
  }
 }
虽然s是private的,但是在类内部应该是可以访问的。
不知道这样是否正确?
(我是菜鸟,但是我积极参与不怕出错与批评,这样会让我得到提高)
  
  

解决方案 »

  1.   

    问问:jin2001你这个程序*.java名叫什么,因为父类和子类各有一个方法main()
      

  2.   

    "Cleaner的成员变量s为私有,Detergent 无法继承"继承没有这样的限定吧,只是说如果父类中的方法或变量的级别(private,protect,public)子类不可把private的往public的改,但可以把public的往private改
      

  3.   

    private String s; 无法继承没错,而这个s是存在的。 detergent并没有直接访问s,
    而是通过public的方法来访问s, 所以执行结果使没问题的
      

  4.   

    气死我了,刚刚敲了半天,结果提交时出错百敲了。大意是
    可以结合private变量的getter,setter方法想想。另外,如果私有变量的值永远无法见人,那他也就没有存在的意义了。
      

  5.   

    这个程序我在机子上跑了一下,根本不会出现这样的结果,在detergent的main中定义的x对输出没有反应,也就指明了错误的所在
      

  6.   

    private :
    if private exist before variable or method , then any other class(sub_class,one package) CANNOT (DERICTLY get this data) or invoke this method.
      

  7.   

    同意zych72(闹闹):其实大家应该看看encapsulotion的定义:hide some attribute of a class and provide some public interface to access them.所以s虽然是private,但是访问方法是public,所以仍然可以访问阿