class Atom { Atom(){System.out.print("atom ");} } class Rock extends Atom{ Rock(String type){System.out.print(type);} } public class Mountain extends Rock{ Mountain(){ super("granite "); new Rock("granite "); } public static void main(String[]...a){new Mountain();} }
会报出atom granite atom granite 这个错误!
这句话让我懵了,程序没问题的话当然会打印出:“atom granite atom granite”。创建子类对象之前一定会先初始化父类,或者说先调用父类构造器。如果不显示调用父类的构造器,则会默认的调用父类的无参构造器,除非父类不存在无参构造器,则报错。
楼上的,这个问题我解决了。谢谢了!public static void main(String...a){ } public static void main(String... a){}两个区别是什么?
Atom(){System.out.print("atom ");}
}
class Rock extends Atom{
Rock(String type){System.out.print(type);}
}
public class Mountain extends Rock{
Mountain(){
super("granite ");
new Rock("granite ");
}
public static void main(String[]...a){new Mountain();}
}
这句话让我懵了,程序没问题的话当然会打印出:“atom granite atom granite”。创建子类对象之前一定会先初始化父类,或者说先调用父类构造器。如果不显示调用父类的构造器,则会默认的调用父类的无参构造器,除非父类不存在无参构造器,则报错。
一个是main函数是程序执行的入口,另一个是普通的方法。