在java中继承构造函数

时间:2017-05-20 02:28:25

标签: java inheritance

当我们在java中使用继承时,我们可以通过子类继承超类的构造函数吗?

tutorialspoint,它说:

  

子类继承所有成员(字段,方法和嵌套   来自其超类的类)。构造者不是成员,所以他们   不是由子类继承,而是超类的构造函数   可以从子类调用。

但是在同一个教程的某个地方说:

  

如果一个类继承了另一个类的属性,则为子类   自动获取超类的默认构造函数。

所以我想知道子类是否可以继承超类的构造函数?

3 个答案:

答案 0 :(得分:6)

  

所以我想知道子类是否可以继承super的构造函数   类?

构造函数无法继承

接下来,我设法在tutorialspoint找到了您与之相关的来源。

重要的是要注意,它所提及的部分明确标题为调用超类构造函数,并声明:

  

如果一个类继承了另一个类的属性,则为子类   自动获取超类的默认构造函数。但   如果你想调用超类的参数化构造函数,你   需要使用super关键字,如下所示。

super(values);

简单地说,这就是说,如果子类构造函数没有指定要调用哪个超类构造函数,那么编译器将自动调用超类中的可访问 no-args 构造函数。

但是,一旦超类中有参数化构造函数,必须将其作为派生类构造函数中的第一个语句调用,否则您的程序将编译

e.g

public class Super { ... }
public class Derived extends Super { ... } // good ! compiler puts in a public default constructor for you.

下面的代码将编译,您应该收到错误说明:

  

Super

中没有默认构造函数
public class Super {
    public Super(int id) {...} 
}
public class Derived extends Super {...}

意味着你需要显式地调用Super类构造函数作为Derived类的构造函数中的第一个语句,提供必要的参数,例如:

public Derived(){ super(12);}

答案 1 :(得分:1)

您可以使用super关键字访问超类构造函数。

您需要在子类中定义构造函数并调用超级构造函数。

characterID

答案 2 :(得分:-1)

默认情况下,所有超类构造函数都是继承的,您可以使用子类构造函数调用这些构造函数。

当你实例化子类对象时,子类构造函数之前的子类期望它将执行超类构造函数,然后它将继续执行子类构造函数。如果您想使用除默认超级构造函数之外的其他超级构造函数,则可以使用子类构造函数中的super关键字进行调用,并且此调用应该是子类构造函数中的第一个语句。

示例:

public Subclass(String msg) {
    super(msg); // calling non default super class constructor
    // any other initialization
}