关于java中超类构造函数的关联

时间:2015-06-25 11:16:03

标签: java constructor super

如果我创建一个没有构造函数的子类的对象,那么我知道编译器将隐式提供一个默认构造函数。如果我在子类中创建构造函数并尝试使用super关键字访问超类构造函数,那么现在,超类中没有构造函数。编译器是否也会为超类提供默认构造函数?

6 个答案:

答案 0 :(得分:0)

是的,如果没有指定的构造函数,则始终存在默认的空构造函数

答案 1 :(得分:0)

  

编译器是否也为超类提供了默认构造函数???

默认构造函数将在那里,无论是否有需要它的子类。编译父级时提供默认值,而不是更晚。

  

...如果我创建了子类构造函数并尝试使用super关键字访问超类构造函数,并且超类中没有构造函数,那该怎么办呢。

确实:默认值。

答案 2 :(得分:0)

就是这样。

让我们谈谈Object这是java中最高级的类,如果你打开一个编辑器而只是创建一个类,那么就假设它正在扩展Object。 Java中的每个类都从Object扩展。如果你不编写自己的构造函数,那么Compiler将提供一个。

但是如果你编写自己的构造函数,让我们说一个带有一个参数的构造函数,编译器将不会为你提供任何构造函数。

现在让我们说你扩展上面的类,然后编译器会抱怨你说超类没有默认的构造函数而不是自定义构造函数所以你需要为这个子类创建一个构造函数,因为第一个被调用的构造函数启动来自OBJECT的最高级别,然后继续前进。

希望这个答案全面, 感谢。

答案 3 :(得分:0)

是的,即使您没有明确声明

,也总会发生超级
   public class FatherTest {

   }


public class SonTest extends FatherTest{

public SonTest(String sonName){
    super(); // this will always occurs

    }

}

答案 4 :(得分:0)

如果您没有为类编写构造函数,编译器将隐式为您添加一个空构造函数。

这意味着:

<!doctype html>
   <html>
     <head>
       <meta charset="UTF-8"><title>WEB SERVICE</title>
        <link rel="stylesheet" href="/css/merge.css"/>
        <script type="text/javascript"> ..... till the end of the webpage

与此相同:

public class X {
}

答案 5 :(得分:0)

如果超类没有显式构造函数,则会向其添加隐式默认构造函数。所以你的super()会调用它。

如果超类只有一些带参数的构造函数。然后子类中的super()将无法编译。您必须显式使用已定义的超类构造函数super(param1, param2, ...)之一,因为如果您不调用它,将调用super()