这是父类:class Cleanser 
{
  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();
  }
}这是子类; public class Detergent extends Cleanser 
{
  // Change a method:
  public void scrub() 
  {
    append(" Detergent.scrub()");
    super.scrub(); // Call base-class version
  }
  // Add methods to the interface:
  public void foam() { append(" foam()"); }
  // Test the new class:
  public static void main(String[] args) 
  {
    Detergent x = new Detergent();
    x.dilute();
    x.apply();
    x.scrub();
    x.foam();
    x.print();
    System.out.println("Testing base class:");
    Cleanser.main(args);
  }
} ///:~
子类的最后一句
    Cleanser.main(args);
这个怎么理解阿~?

解决方案 »

  1.   

    我没有给出命令行引数阿~为什么他会打印出:
    Cleanser dilute() apply() Detergent.scrub() scrub() foam()
    Testing base class:
    Cleanser dilute() apply() scrub()
      

  2.   

    public static void main(String[] args) 
    {
    Detergent x = new Detergent();
    x.dilute();
    x.apply();
    x.scrub();
    x.foam();
    x.print();
    System.out.println("Testing base class:");
    Cleanser.main(args);不是有调用
    dilute();
    apply();
    scrub();
    foam();
    print();
    这几个方法么
    最后Cleanser.main(args);调用父类的静态main方法
      

  3.   

    调用父类的main方法啊.因为main方法为static,
    所以可以直接用类名.方法调用.
      

  4.   

    直接手工调用main方法啊,你只要把main当成一个普通方法就可以理解啊javac Class 是由jvm来调用main方法的
      

  5.   

    java.lang.String类代表不可变的字符序列。为什么s+=a??string不是不可变的吗?为什么可以加?
      

  6.   

    String 在赋值的时候是重新分配内存空间的,所说的不变是指已创造的内存空间不能动态增加。StringBuffer就不同了
      

  7.   

    我明白了
    忘了main是static的……
      

  8.   

    LZ的这个例子应该是在学习方法覆盖和重载时的例子,main方法也可像一般方法被调用,由于是静态方法,所以可以直接用类名.方法调用.
      

  9.   

    看了你回复的贴,想向您提问一个类似的问题
     //Test2.java 
    class Test1{ 
    private String s="Test1"; 
    public void append (String a) {s+=a;} 
    public void me() {append("me()");} public String toString() {return s;} 
    public static void main(String[] arg) { //Test1 main() 
    Test1 t1=new  Test1(); 
    t1.me(); 
    System.out.println(t1); 

    } public class Test2 extends Test1{ 
        public void you() {append("you()");} 
    public static void main(String[] args) { //Test2 main() 
    Test2 t2=new Test2(); 
    t2.me(); 
    t2.you(); 
    System.out.println(t2); 
    Test1.main(args); 
    //Test1.main(arg);   error 


    //output :Test1me()you() 
              Test1me() 提问:1.Test2 main()中Test1.main(args);语句,用类名直接调用main(),括号中的参数应该是什么 
         2.参数为什么只能是args 
        3.参数换成arg,就出错,由此看Test1.main(args);是调用的子类中main(),为什么由输出结果看是调用的父类的main()