一般不会含有两个入口函数
上面的代码效果跟下面一样,继承的类没有被执行
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();
}
}

解决方案 »

  1.   

    第一个类结果就是char:abc啊
    你是不是对s+=a这句的理解不对啊
    在String型里+=就是把两个String和到一起再赋值到前面的String
      

  2.   

    to:LoveRose(旺旺)
    书中原话:"其次,无论Cleanser还是Detergent都包含了一个main()方法。我们可为自己的每个类都创建一个main()。通常建议大家象这样进行编写代码,使自己的测试代码能够封装到类内。即便在程序中含有数量众多的类,但对于在命令行请求的public类,只有main()才会得到调用。所以在这种情况下,当我们使用“java Detergent”的时候,调用的是Degergent.main()——即使Cleanser并非一个public类。采用这种将main()置入每个类的做法,可方便地为每个类都进行单元测试。而且在完成测试以后,毋需将main()删去;可把它保留下来,用于以后的测试。"
    到底怎么回事?
      

  3.   

    to:LoveRose(旺旺)
    我改了一下,把父类的main去了,果然好使.但书中的话好像很有道理啊.
      

  4.   

    to: dxyjb2000(小白菜) 
    这个例子在thinking in java的中的哪一章,我好好温习温习
    都怪当初没有好好琢磨透。
      

  5.   

    to:LoveRose(旺旺)
    第6章类再生,第三个程序Detergent.java
      

  6.   

    你的代码跟书上的代码执行结果是不一样的:
    你的代码执行 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()
      

  7.   

    to: dxyjb2000(小白菜) 
    你说的结果是执行什么的结果
    更正一下,我执行java Tj6_2的结果是
    cleanabnew ccd
    base class
    cleanabc
    这个应该很容易理解的
      

  8.   

    我晕!!!!!!!!
    我用jcreator2.0 LE运行 结果是:
    char:abc
    在命令提示符里用jdk运行,java Tj6_2结果居然是:
    char:abnew ccd
    base class
    char:abc
    为什么会这样啊
      

  9.   

    测试了一把!
    jcreator里是按顺序执行第一个含有main函数的类
    然后执行该类的main入口函数
    你也可以把那个继承的类挪到最上面
    结果就不一样了
      

  10.   

    to:LoveRose(旺旺)
    的确如此,把继承类放到上边就没有问题了.看来以后用main函数要小心了.
    多谢啦,结贴!