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