2 qq 33720032 qq_33720032 于 2016.02.03 21:27 提问

java子父类构造方法参数

子类构造方法参数一定要和父类构造方法参数相同吗,子父类构造方法参数有什么关系

9个回答

caozhy
caozhy   Ds   Rxr 2016.02.03 21:43
已采纳
 class A
{
    public A(int a) { }
}
class B extends A
{
    public B(int b) { }
}

这不行,因为A没有无参数构造函数。派生类需要指定:

 class A
{
    public A(int a) { }
}
class B extends A
{
    public B(int b) { super(b); }
}

这样就可以

caozhy
caozhy   Ds   Rxr 2016.02.03 21:32

当然不需要了。当父类没有无参数构造函数的时候,派生类构造函数必须用super(参数列表) 指明自己调用哪个基类的构造函数。
但是派生类构造函数的参数可以不同(一般派生类的参数会更多,或者包含初始化自己特有变量的参数)

caozhy
caozhy   Ds   Rxr 2016.02.03 21:41
 举例:
class A
{

}
class B extends A
{
    public B(int b) { }
}

以上代码可以编译,B显然有一个有参数构造函数,A没有。这没问题
caozhy
caozhy   Ds   Rxr 2016.02.03 21:43
 class A
{
    public A(int a) { }
}
class B extends A
{
    public B(int b, int c) { super(b); }
}

再给B增加一点参数,这样也可以

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.03 22:06

子类构造函数的参数跟父类构造函数的参数当然可以不一致了,因为子类继承自父类,可以有自己特有、而父类没有的一些属性。
子类编写构造函数的时候,需要注意的是,如果父类也提供了有参构造函数,那么第一步一定是先调用父类的有参构造函数。
所以子类构造函数的参数列表一定是包含父类有参构造函数列表。例如子类参数集合为A,父类参数集合为B,那么必须A>=B。

a774057695
a774057695   2016.02.03 23:01

当然是不一定的,我们抛开代码实现上的东西谈一下,子类是父类中更具体的一部分,而构造函数的参数是干什么的?初始化成员变量(可以理解为属性,特征),那么子类是否具有父类的属性、特征呢?当然有,而且应该具有更多的属性、特征。构造器(构造函数)的本质是创建一个内存对象,如果有必要,可以继续为该类对象初始化部分成员变量。

paopaoTT
paopaoTT   2016.02.04 19:53

这个是没必要相同的。那只不过是一种依赖而已

91program
91program   Ds   Rxr 2016.02.03 21:36

是没有必要。
在初始化子类时,会调用父类,没有参数上的依赖性。参数的多与少,都是可以的。

91program
91program   Ds   Rxr 2016.02.03 21:36

是没有必要。
在初始化子类时,会调用父类,没有参数上的依赖性。参数的多与少,都是可以的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!