///这样注释后又输出什么?为什么//: Detergent.java
// Inheritance syntax & propertiesclass 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);
  }
} ///:~

解决方案 »

  1.   

    KAO
    怎么用CMD命令执行跟用JCreate 2.5Pro执行的结果不是一样的呀搞得我研究了好久,我说怎么回事,没有public的main()竟然会运行???
      

  2.   

    1。运行这段代码先是执行public class Detergent中的main().
    2。detergent继承了cleanser,所以detergent中没有某种方法名,将会找父类。
    3。最后Cleanser.main()利用了静态方法的特点,未经过对象,调用了方法。
      

  3.   

    建议看看Java pitfall和more java pitfalls
      

  4.   

    第一个程序里Detergent.main()好像都没执行,而是直接执行Cleanser.main,奇怪??
    而第二个程序注释掉子类的main(),输出和第一次一样。
    这是不是说在Java里,如果父类和子类同时存在main()时就执行父类的main()函数啊?
      

  5.   

    在JC下面的结果是两个一样 看结果是都只是执行了父类里的main方法
    而在CMD下面 执行的结果是“正确的”(这里的正确说的是可以分析出为什么这样)。
    在CMD下面 第一个程序创建了子类对象 所以也就调用了父类的成员函数
    第二个程序没有创建任何对象 所以没有调用任何一个类的成员函数 而是直接输出 然后结束JC下面的结果看起来象是解释器 按照书写顺序直接执行了父类的MAIN方法 所以造成了输出结果的相同 因为父类是一样的 不要被迷惑了
      

  6.   

    刚开始用JC就看到这么多问题,不是说JC是和众多IDE里和SDK结合最好的一款吗?怎么会这样?