在java中使用Object类的默认构造函数

时间:2015-02-12 18:10:00

标签: java constructor

当你写Dog d = new Dog();时 将调用Dog类的默认构造函数。 Dog类的默认构造函数的第一行将是super(),它将调用Object类的默认构造函数。这是什么意思?它将创建两个对象,一个Dog类对象和一个Object类对象?

如果你说它只会创建Dog类的对象,那么将从Object类的默认构造函数调用的Dog类的默认构造函数会产生什么影响?

2 个答案:

答案 0 :(得分:0)

让我们试着解释为什么会这样;初始化“狗”时,你必须考虑那条狗是什么。你在这做什么?好吧,首先,如果狗类扩展了任何东西,你还必须初始化那种类型的东西。例如,让我们说狗延伸动物。如何在不初始化动物的情况下初始化狗?所有的狗都是动物,所以要初始化一只狗,你打电话super()来初始化动物。这一系列事件可以一直跟踪到Object的初始化;毕竟,java中的所有对象扩展了Object。因此,如果没有动物,你就不能养狗;没有生物体,你不能拥有动物;等等等,你不能先拥有一个没有对象的___;这就是java使用Object的默认构造函数的原因。 1)你必须有一个对象,2)对象源代码中没有提供的构造函数。

请记住,只有在未提供构造函数时才会使用默认构造函数。如果你写了

public Dog() { 
    //code
}  // this is just a no param constructor

在您的代码中,您将不会获得默认构造函数。在java中,只有在没有定义默认构造函数的情况下才会给出默认构造函数。

答案 1 :(得分:0)

首先 - 默认构造函数是编译器为您提供的构造函数,以防您不想编写它。如果你编写一个构造函数,那么将使用那个构造函数(而不是默认构造函数)。

现在回到你的问题,你只在构造函数中创建一个对象。该对象将具有一些将按其定义的顺序初始化的变量。首先,您将初始化超级成员,然后初始化您的Dog类成员。这就是super()的意思。