///这样注释后又输出什么?为什么//: 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);
}
} ///:~
// 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);
}
} ///:~
怎么用CMD命令执行跟用JCreate 2.5Pro执行的结果不是一样的呀搞得我研究了好久,我说怎么回事,没有public的main()竟然会运行???
2。detergent继承了cleanser,所以detergent中没有某种方法名,将会找父类。
3。最后Cleanser.main()利用了静态方法的特点,未经过对象,调用了方法。
而第二个程序注释掉子类的main(),输出和第一次一样。
这是不是说在Java里,如果父类和子类同时存在main()时就执行父类的main()函数啊?
而在CMD下面 执行的结果是“正确的”(这里的正确说的是可以分析出为什么这样)。
在CMD下面 第一个程序创建了子类对象 所以也就调用了父类的成员函数
第二个程序没有创建任何对象 所以没有调用任何一个类的成员函数 而是直接输出 然后结束JC下面的结果看起来象是解释器 按照书写顺序直接执行了父类的MAIN方法 所以造成了输出结果的相同 因为父类是一样的 不要被迷惑了