看孙鑫java视频时,在讲到继承与构造方法时,有这么一段话:        每个子类构造方法的第一个语句,都是隐含的调用super(),如果父类没有这种形式的构造函数,那么编译时就会出错可是在定义的类中不是有默认的构造方法吗?如class Base{},{}里面不是有个默认的构造方法Base(){}吗?那样的话上面这句话不就没什么意义了吗?Java Code1:
class FatherTest
{

}public class SonTest extends FatherTest
{
public static void main(String[] args)
{

SonTest son = new SonTest();
}
}
这样可以编译通过Java Code2:
class FatherTest
{
public FatherTest(String name)
        {
               System.out.println(name); 
        }
}public class SonTest extends FatherTest
{
public static void main(String[] args)
{

SonTest son = new SonTest();
}
}
这样不能编译通过
在Java Code2中还有没有这个默认的构造方法吗?

解决方案 »

  1.   

    默认构造函数不是总是存在,当你声明了另一个不同的构造方法后,程序自动把默认的构造方法去除了,比如你的第二个程序就是这样,public FatherTest(String name) 
            { 
                   System.out.println(name);  
            } 这个方法会覆盖掉默认的方法,所以,你要加一个
     Father(){},让他空实现就可以了
      

  2.   

    默认构造函数是编译器自动创建的 如果你没指定任何构造函数 编译就帮你弄个 如果你自己有构造函数了 编译器就不帮你了 class FatherTest 

    public FatherTest(String name) //这个自然就没有FatherTest()这个构造函数了
            { 
                   System.out.println(name);  
            } 
    } public class SonTest extends FatherTest 

    public static void main(String[] args) 
    { SonTest son = new SonTest(); 

    } 可以在SonTest里写个构造函数
     SonTest(String name){
       super(name);
    }或者在FatherTest里加个无参的构造函数就可以了
      

  3.   

    构造子类对象的时候 它还会构造一个父类对象出来 你不显示super调用父类的构造方法 它就自动调用 默认调用无参的那个父类构造方法 父类里面又没有这个方法 自然就抱错了
      

  4.   

    看孙鑫java视频时,在讲到继承与构造方法时,有这么一段话:         每个子类构造方法的第一个语句,都是隐含的调用super(),如果父类没有这种形式的构造函数,那么编译时就会出错 答:孙鑫同志的话有些问题。一定要自己多思考。多看看JAVA祖师爷James Gosling的原著。
    应该:每个子类构造方法的第一个语句,必须是this(..)或者super(...)。若不是这样,
    则JAVA编译器自动插入一条super()语句成为第一条语句。
      

  5.   

    我懂了
    可thinking in java 对于我这样的初学者 难度忒大了
    孙鑫老头讲得还是很仔细的啦