Eclipse的一个“bug”

  标题之所以打上双引号,是因为暂时不知道怎么确定。

  一个 .java文件里有两个类:public Bath;Soap。它们都有一个main()方法。

  从命令行单独访问任意一个类的main()方法,都没毛病;从Eclipse里访问,也没毛病。

  但是,如果public类(Bath)没有了public main()。在命令行访问非public的Soap的main()方法是没有毛病的,在Eclipse里却无法访问。

  (《Java编程思想》这本书的确写的有一定的质量,但是表述逻辑太混乱了,而且存在很多的有毛病的地方)

 1 package a2.package1.inheritance;
 2 
 3 /**
 4  * <ol>
 5  * <li>覆盖:方法签名必须与父类相同,实现应该不同;返回值、访问权限可变
 6  * <li>访问权限只能拓宽,不能窄化
 7  * </ol>
 8  * @author LSH
 9  *
10  */
11 public class Detergent extends Cleanser{
12     
13     @Override
14     void scrub(){
15         append(" Detergent.scrub()");
16         /*父类同名方法什么时候要调用,什么时候不需要调用?*/
17         super.scrub();
18     }
19     
20     public void foam(){ append(" foam()"); }
21     
22     public static void main(String[] args) {
23         Detergent x = new Detergent();
24         x.dilute();
25         x.apply();
26         x.scrub();
27         x.foam();
28         System.out.println(x);
29         System.out.println("测试父类:");
30         /*此处直接调用main方法*/
31         Cleanser.main(args);
32     }
33 
34 }
35 
36 class Cleanser{
37     private String s = "Cleanser";
38     public void append(String a){s += a;}
39     public void dilute(){ append(" dilute()"); }
40     public void apply(){ append(" apply()"); }
41      void scrub(){ append(" scrub()"); }
42     public String toString(){return s;}
43     
44     /**
45      * <span>
46      * 只有同文件内的公共类Detergent有main方法时,
47      * 该类的main方法才能被调用;
48      * Detergent没有main方法时,从命令行能调用该类的main方法。
49      * 或许,这就是Eclipse存在的一个“bug”
50      * </span>
51      * @param args 参数
52      */
53     public static void main(String[] args) {
54         Cleanser x = new Cleanser();
55         x.dilute();
56         x.apply();
57         x.scrub();
58         System.out.println(x);
59     }
60 }
View Code

 

posted @ 2018-03-05 17:58  梁桦  阅读(427)  评论(0编辑  收藏  举报