标题之所以打上双引号,是因为暂时不知道怎么确定。
一个 .java文件里有两个类:public Bath;Soap。它们都有一个main()方法。
从命令行单独访问任意一个类的main()方法,都没毛病;从Eclipse里访问,也没毛病。
但是,如果public类(Bath)没有了public main()。在命令行访问非public的Soap的main()方法是没有毛病的,在Eclipse里却无法访问。
(《Java编程思想》这本书的确写的有一定的质量,但是表述逻辑太混乱了,而且存在很多的有毛病的地方)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }