为什么我们不能调用基类构造函数而不在多重继承(java)中创建派生类的对象

为什么我们不能调用基类构造函数而不在多重继承(java)中创建派生类的对象,java,Java,为什么编译器会给出错误-> error.java:18:error:B类中的构造函数B不能应用于给定的类型; C类扩展到B类 ^ 必需:字符串 找到:没有参数 原因:实际参数列表和正式参数列表长度不同 1错误您必须调用child的构造函数 构造函数创建其类型的对象,因此如果调用父构造函数,则只能创建父Instance。这就是为什么它是不允许的,您必须重写C类,如下所示: class A { public A() {...} } class B extends A { public

为什么编译器会给出错误->
error.java:18:error:B类中的构造函数B不能应用于给定的类型; C类扩展到B类 ^ 必需:字符串
找到:没有参数
原因:实际参数列表和正式参数列表长度不同

1错误

您必须调用child的构造函数

构造函数创建其类型的对象,因此如果调用父构造函数,则只能创建父Instance。这就是为什么它是不允许的,您必须重写C类,如下所示:

class A
{
  public A()
  {...}
}

class B extends A
{
  public B(String s)
  {...}
}

class C extends B
{
  public C()
  {...}
}

class const
{
  public static void main(String a[])
  {
      B object=new B("Hello"); // gives error.
  }
}
注意:在这种情况下,错误为:

class C extends B
{
    public C(String s)
    {
        super(s);
        ...
    }
}

您必须调用child的构造函数

构造函数创建其类型的对象,因此如果调用父构造函数,则只能创建父Instance。这就是为什么它是不允许的,您必须重写C类,如下所示:

class A
{
  public A()
  {...}
}

class B extends A
{
  public B(String s)
  {...}
}

class C extends B
{
  public C()
  {...}
}

class const
{
  public static void main(String a[])
  {
      B object=new B("Hello"); // gives error.
  }
}
注意:在这种情况下,错误为:

class C extends B
{
    public C(String s)
    {
        super(s);
        ...
    }
}


代码snippte是否太短?/因为C中的构造函数调用隐式构造函数B(),而该构造函数不存在。您必须使用字符串参数调用超级构造函数(B)。构造函数中有什么?B类构造函数会隐式调用a类构造函数。参数有什么关系?错误不应该出现在创建B实例的行上。它应该出现在C构造函数中。仔细检查编译时错误。代码snippete是否太短?/因为C中的构造函数调用隐式构造函数B(),而该构造函数不存在。您必须使用字符串参数调用超级构造函数(B)。构造函数中有什么?B类构造函数会隐式调用a类构造函数。参数有什么关系?错误不应该出现在创建B实例的行上。它应该出现在C构造函数中。仔细检查编译时错误。这就解决了问题。但问题是,如果我想在不使用C对象的情况下调用B类的构造函数怎么办?这是可能的。在您的情况下没有错误,您发布的代码应该工作错误可能在C类中,因为避免了
super(String)
,请查看@JonSkeet comment@ChaitanyaRt。C类构造函数中的错误。ThnxNo problem@chaitanYat这解决了问题。但问题是,如果我想调用B类的构造函数而不调用C的对象,该怎么办?这是可能的。在您的情况下没有错误,您发布的代码应该工作错误可能在C类中,因为避免了
super(String)
,请查看@JonSkeet comment@ChaitanyaRt。C类构造函数中的错误。ThnxNo problem@Chaitanya