Java Don';我不理解为什么子类必须显式调用具有参数的基类构造函数

Java Don';我不理解为什么子类必须显式调用具有参数的基类构造函数,java,Java,这似乎没有意义,因为子类被迫明确地调用基类的构造函数。若用户可以创建自己的构造函数,而不限于基类,那个么它将更加灵活。任何人都可以告诉我为什么在JAVA中强制执行这种行为?这有什么好处 class A { public A(String s) { System.out.printl

这似乎没有意义,因为子类被迫明确地调用基类的构造函数。若用户可以创建自己的构造函数,而不限于基类,那个么它将更加灵活。任何人都可以告诉我为什么在JAVA中强制执行这种行为?这有什么好处

class A
{                                                                                                    
  public A(String s)
  { 
    System.out.println(s);
    System.out.println("BASE parameter constructor");
   }   
}

class C extends A
{  
       public C(String s)   
       {
        super(s);// why here compiler force to call constructor of base class
        System.out.println("Sub parameter constructor");
        }
}

因为基类没有默认情况下从子类调用的无参数构造函数

如果你就是这样做的话

public C(String s)
    {
        System.out.println("Sub parameter constructor");
    }
然后,对超级构造函数的默认调用将放置在那里,它将成为

public C(String s)
    {
    super();
    System.out.println("Sub parameter constructor");
    }

但编译器不提供无参数构造函数,因为您已经定义了参数化构造函数,因为只有在没有为类提供其他构造函数时才提供参数化构造函数。

因为基类没有默认从子类调用的无参数构造函数

如果你就是这样做的话

public C(String s)
    {
        System.out.println("Sub parameter constructor");
    }
然后,对超级构造函数的默认调用将放置在那里,它将成为

public C(String s)
    {
    super();
    System.out.println("Sub parameter constructor");
    }
但编译器不提供无参数构造函数,因为您已经定义了参数化构造函数,因为它仅在没有为类提供其他构造函数时提供。

如果类不包含构造函数声明,则默认 没有形式参数且没有throws子句的构造函数是 隐式声明

如果要声明的类是原始类对象,则 默认构造函数的主体为空。否则,默认值为 构造函数只调用超类构造函数,而不使用 争论

如果默认构造函数是隐式的,则这是一个编译时错误 已声明,但超类没有可访问的构造函数 (§6.6)不接受任何参数,也没有抛出条款。

如果类不包含构造函数声明,则默认 没有形式参数且没有throws子句的构造函数是 隐式声明

如果要声明的类是原始类对象,则 默认构造函数的主体为空。否则,默认值为 构造函数只调用超类构造函数,而不使用 争论

如果默认构造函数是隐式的,则这是一个编译时错误 已声明,但超类没有可访问的构造函数 (§6.6)不接受任何参数,也没有抛出条款。


创建新类时,不必指定构造函数。Java在编译期间隐式地为您创建一个。这样的构造函数称为默认构造函数

如果您的类没有指定构造函数,并且如果您对该类进行子类化,那么类似地,您不必显式提供构造函数


然而,当您开始在类中使用构造函数时,Java不会为您创建默认构造函数。如果构造函数至少包含一个输入参数,则子类必须调用父类的构造函数。

创建新类时,不必指定构造函数。Java在编译期间隐式地为您创建一个。这样的构造函数称为默认构造函数

如果您的类没有指定构造函数,并且如果您对该类进行子类化,那么类似地,您不必显式提供构造函数


然而,当您开始在类中使用构造函数时,Java不会为您创建默认构造函数。如果构造函数至少包含一个输入参数,则子类必须调用父类的构造函数。

因为要构造C,编译器必须构造a并需要知道如何构造(因为没有默认的无参数构造函数),因为要构造C,编译器必须构造a并需要知道如何构造(因为没有默认的无参数构造函数)