java子父类构造方法参数

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

 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); }
}

这样就可以

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

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

 举例:
class A
{

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

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

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

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

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