创建子类对象时,子类一定会调用父类的无参构造方法吗?可以阻止吗?
public class TestExtend
{
public static void main(String args[]) {
Father f = new Father(1);
Son s = new Son(1);
}
}
class Father
{
public Father() {
System.out.println("爸爸的构造方法");
}

public Father(int a) {
System.out.println("爸爸的构造方法222");
}
}
class Son extends Father
{
public Son() {
System.out.println("儿子的构造方法");
}
public Son(int a) {
System.out.println("儿子的构造方法222");
}}
输出结果:
爸爸的构造方法222
爸爸的构造方法
儿子的构造方法222

解决方案 »

  1.   

    你可以显式的用super()来调用你想要的,你不自己调用编译器只能帮你写个super();
      

  2.   

    子类调用父类的构造方法
    父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。public class MyException extends Exception{} // MyException类只有一个隐含的默认构造方法尽管在Exception类中定义了如下形式的构造方法:public Exception(String msg)但MyException类不会继承以上Exception类的构造方法,因此以下代码是不合法的。//编译出错,MyException类不存在这样的构造方法Exception e=new MyException("Something is error"); 在子类的构造方法中,可以通过super语句调用父类的构造方法。
      

  3.   

    http://book.csdn.net/bookfiles/49/100491552.shtml
      

  4.   

    这个是不可以的,必须的调用,在构造子类的时侯必须的要调用父类的一个构造器,你可以显示调用如super();如果你不调用,那么它会自动的为你调用其父类的无参构造器(这个时侯如果父类没有这个构造器,就会报错)。
    java的老祖宗就是Object类,什么类都是它的子类,它就有一个无参的构造器,就是用来被子类调用的.