super()如何在构造函数中工作

时间:2014-06-25 17:11:07

标签: java constructor super

我有一个关于如何在构造函数中使用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的基本知识吗?任何对菜鸟的帮助都会非常感激。谢谢!

4 个答案:

答案 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类构造函数。

我希望我回答你的问题。