标题: 子父类的继承问题 [打印本页] 作者: 古银平 时间: 2012-5-21 19:16 标题: 子父类的继承问题 比如:
class Fu
{ Fu (int a)
{
System.out.println("父类 :"+x);
}
}
class Zi extends Fu
{ Zi ()
{
System.out.println("子类 :");
}
Zi (int x)
{
System.out.println("子类 :"+x);
}
}
class Test
{
public static void main(String[] args)
{ Zi a=new Zi();
Zi b=new Zi(5);
}
}
会出现错误,为什么?作者: 小小企鹅 时间: 2012-5-21 19:22 本帖最后由 小小企鹅 于 2012-10-27 22:32 编辑
class Fu {
Fu(int a) {
int x = a; //定义局部变量x
System.out.println("父类 :" + x);
}
Fu() {//定义构造函数Fu()
};
}
class Zi extends Fu {
Zi() {
System.out.println("子类 :");
}
Zi(int x) {
System.out.println("子类 :" + x);
}
}
class Test {
public static void main(String[] args) {
Zi a = new Zi();
Zi b = new Zi(5);
}
} 作者: 凡延海 时间: 2012-5-21 20:12
Java中继承关系构造方法调用是有顺序的,子类在产生对象实例的时候首先会调用父类的构造方法,然后在调用子类的构造方法。Fu类中显式的声明了在参数的构造方法,那么在子类Zi的构造方法中调用父类的构造方法才可以,不然就会像楼主说的那样会因为找不到父类构造方法而报错。楼主可以在父类加上无参数的构造方法,
Fu (int x)
{
x=1000;
System.out.println("父类 :"+x);
}
}
class Zi extends Fu
{
Zi ()
{
System.out.println("子类 :");
}
Zi (int x)
{
System.out.println("子类 :"+x);
}
}
class Test
{
public static void main(String[] args)
{ Zi a=new Zi();
Zi b=new Zi(5);
}
}
file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\1932687959\QQ\WinTemp\RichOle\L]8AHAAQ829M$LYQ8F@6{MR.jpg
我是这样理解的:
Zi a=new Zi();这一句,建立完对象就会访问父类中空参数的构造函数而你的代码里面没有, 所以需要创建一个空参数的构造函数;
Zi b=new Zi(5);这一句,建立完对象就会访问父类中也是 不带参数 的构造函数,然后再方位本类中 带参数 的构造函数。
当父类中没有空参数的构造函数时,需要子类手动通过super语句或者添加一个空参数的构造函数,
还可以通过this语句老访问本类中的构造函数,但是子类中至少有一个构造函数会访问父类中的构造函数。