一般不会含有两个入口函数
上面的代码效果跟下面一样,继承的类没有被执行
class Addstr{
private String s=new String("clean");
public void add(String a){s+=a;}
public void a(){add("a");}
public void b(){add("b");}
public void c(){add("c");}
public void print(){System.out.println(s);}
public static void main(String[] args){
Addstr p=new Addstr();
p.a();p.b();p.c();p.print();
}
}
上面的代码效果跟下面一样,继承的类没有被执行
class Addstr{
private String s=new String("clean");
public void add(String a){s+=a;}
public void a(){add("a");}
public void b(){add("b");}
public void c(){add("c");}
public void print(){System.out.println(s);}
public static void main(String[] args){
Addstr p=new Addstr();
p.a();p.b();p.c();p.print();
}
}
你是不是对s+=a这句的理解不对啊
在String型里+=就是把两个String和到一起再赋值到前面的String
书中原话:"其次,无论Cleanser还是Detergent都包含了一个main()方法。我们可为自己的每个类都创建一个main()。通常建议大家象这样进行编写代码,使自己的测试代码能够封装到类内。即便在程序中含有数量众多的类,但对于在命令行请求的public类,只有main()才会得到调用。所以在这种情况下,当我们使用“java Detergent”的时候,调用的是Degergent.main()——即使Cleanser并非一个public类。采用这种将main()置入每个类的做法,可方便地为每个类都进行单元测试。而且在完成测试以后,毋需将main()删去;可把它保留下来,用于以后的测试。"
到底怎么回事?
我改了一下,把父类的main去了,果然好使.但书中的话好像很有道理啊.
这个例子在thinking in java的中的哪一章,我好好温习温习
都怪当初没有好好琢磨透。
第6章类再生,第三个程序Detergent.java
你的代码执行 java Addstr 结果为cleanabc
执行 java Tj6_2 结果也为cleanabc但是书上不是这样的 java Cleanser 结果为 Cleanser dilute() apply() scrub()
执行 java Detergent
结果为
Cleanser dilute() apply() Detergent.scrub() scrub() foam()
Testing base class:
Cleanser dilute() apply() scrub()
你说的结果是执行什么的结果
更正一下,我执行java Tj6_2的结果是
cleanabnew ccd
base class
cleanabc
这个应该很容易理解的
我用jcreator2.0 LE运行 结果是:
char:abc
在命令提示符里用jdk运行,java Tj6_2结果居然是:
char:abnew ccd
base class
char:abc
为什么会这样啊
jcreator里是按顺序执行第一个含有main函数的类
然后执行该类的main入口函数
你也可以把那个继承的类挪到最上面
结果就不一样了
的确如此,把继承类放到上边就没有问题了.看来以后用main函数要小心了.
多谢啦,结贴!