看孙鑫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中还有没有这个默认的构造方法吗?
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中还有没有这个默认的构造方法吗?
{
System.out.println(name);
} 这个方法会覆盖掉默认的方法,所以,你要加一个
Father(){},让他空实现就可以了
{
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里加个无参的构造函数就可以了
应该:每个子类构造方法的第一个语句,必须是this(..)或者super(...)。若不是这样,
则JAVA编译器自动插入一条super()语句成为第一条语句。
可thinking in java 对于我这样的初学者 难度忒大了
孙鑫老头讲得还是很仔细的啦