我有一个关于如何在构造函数中使用super()的快速问题。我知道它将如何调用超类的基础知识,但我最近查看了一些代码,并且不了解它是如何在这个例子中使用的。以下是困扰我的部分的主旨:
public class MyClass implements MyInterface {
String myString = null;
public MyClass() {
super();
}
public MyClass(String A) {
super();
myString = A;
}
public interfaceMethod {
// this is the method from MyInterface
}
}
我理解构造函数是如何被使用的,但我只是看不到它们中的super()方法。它与它实现的界面有什么关系吗?我认为如果一个类扩展了某些东西,会使用super()吗?我在这里错过了一些关于java的基本知识吗?任何对菜鸟的帮助都会非常感激。谢谢!
答案 0 :(得分:3)
在这种情况下,super()
引用java.lang.Object
的默认构造函数,所有对象都隐式扩展Object
答案 1 :(得分:1)
默认情况下,任何java
类都默认继承自java.lang.Object
,因此上面的代码片段将调用Object类的构造函数(当前不执行任何操作)。
答案 2 :(得分:0)
在继承中,当子类被实例化时,无论子类构造函数中是否存在super()
,都会调用基类的默认(零参数)构造函数。但是,如果要调用parent的任何其他构造函数,可以使用super(带参数)调用它。简而言之,Super()
用于改变父类的实例化模式。
答案 3 :(得分:0)
java中的所有类直接或间接扩展java.lang.Object
。
如果我们写class A
的示例
编译器将执行class A extends Object
。
假设
class A extends B {}
然后将其解释为,
class B extends Object {}
class A extends B {}
据说在对象类初始化其部分之前,不能初始化类。因此,编译器有责任调用Object
类构造函数。编译器通过在构造函数中编写super()
作为第一个语句来实现。所以即使你没有创建任何默认构造函数,编译器也会创建一个并向其写入super()
。
在这种情况下,在没有任何参数的情况下初始化MyClass时,它会调用默认构造函数,其中会看到super()
,因此它会调用Object
类构造函数。
当您使用String参数初始化MyClass
时,它会调用参数化构造函数,该构造函数会在其中看到super(),因此它会调用Object
类构造函数。
我希望我回答你的问题。