当你写Dog d = new Dog();
时
将调用Dog
类的默认构造函数。 Dog
类的默认构造函数的第一行将是super()
,它将调用Object
类的默认构造函数。这是什么意思?它将创建两个对象,一个Dog
类对象和一个Object
类对象?
如果你说它只会创建Dog
类的对象,那么将从Object
类的默认构造函数调用的Dog
类的默认构造函数会产生什么影响?
答案 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()的意思。