繁体   English   中英

Java 构造函数和 super()

[英]Java constructors and super()

我已经看到了一些关于这个主题的问题,但他们都假设有继承的知识。 我书中的例子在继承章节之前,所以父类是java.long.Object。

1. 场景:我的类 FotoApparat 没有自定义构造函数或任何构造函数,我使用FotoApparat meinFotoApparat = new FotoApparat()创建了一个 FotoApparat 实例

问题:由于我的类没有构造函数,也没有 super() 调用,我假设程序会检查父 Object 类是否有合适的构造函数,应该是 new Object(),对吗? 如果是,这是否仍被视为“隐式” super() 调用?

2. 场景:我创建了一个接受参数的自定义构造函数(通过使用 eclipse 源)。 在生成的构造函数中,一开始就添加了 super() 调用,我认为这是我一直在阅读的实际隐式调用。 我在javapoint读到,当创建一个类的实例时,也会创建一个父类的实例,它被super()引用。

问题:我读到这个 ​​super() 调用可以从构造函数中删除,但是如果它被删除并且我使用一个带有参数的构造函数,那么(没有 super())这个父对象是如何创建的?!

谢谢您的帮助 :-)

场景 1:如果您没有定义任何构造函数,则会为您创建一个默认的、无参数的构造函数。 这是使用new FotoApparat()时调用的new FotoApparat() 这个默认构造函数然后调用Object上的构造函数(参见场景 2。)

场景 2:如果您没有显式调用super() ,此调用仍是隐式完成的。 然而,父对象可能没有没有参数的构造函数,在这种情况下,您需要调用特定的构造函数。

由于我的类没有构造函数,也没有 space() 调用,我假设程序会检查父 Object 类是否有合适的构造函数

不完全的。 如果您没有定义构造函数,编译器会为您创建一个。 这个构造函数没有参数,它唯一做的就是调用超类构造函数super()

创建类的实例时,也会创建父类的实例

不完全是:只创建了一个实例。 没有单独的父类实例。

该语句并非完全错误,因为由于继承,创建的子类的一个实例也是父类的实例。

我读到这个 ​​super() 调用可以从构造函数中删除,但是如果它被删除并且我使用一个带有参数的构造函数,那么(没有 super())这个父对象是如何创建的?!

在这种情况下,编译器插入对无参数超类构造函数super()的调用。 但这不会创建一个单独的“父对象”——只创建一个对象。

您的研究可能没有弄清楚对象创建初始化之间的区别。 调用构造函数不会“创建”对象。 对象是通过在内存中为其保留空间来创建的。 保留内存后,调用构造函数来“初始化”对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM