-2

像这样:

public class class1 {   
    public void xxx(){

        super.getXXX();

        super().getXXX();

    }
}
4

2 回答 2

7

两者都在子类中用作调用或引用其超类的一种方式。

super()是您在构造函数或覆盖方法中调用超类的构造函数或超类的覆盖方法的方法调用。在这些情况下,super() 调用也可以接受参数。

请注意,由于默认情况下所有类都至少继承自 Object,因此您始终可以在构造函数中调用 super()(尽管它必须是构造函数中的第一条语句)。这个 super() 调用实际上通常由编译器默认插入到你的无参数构造函数中。

但是,如果超类没有无参数构造函数,这可能会变得很棘手,在这种情况下,如果没有适当的参数,您对 super() 的调用将失败。默认情况下通常会生成一个无参数的构造函数,因此您不必担心它,但是如果您使用 args 显式定义另一个构造函数,它将不会自动生成,因此您可能需要显式定义一个自己。

super另一方面,没有括号只是对超类本身的引用,就像任何其他变量一样。它可用于调用该类中的任何可访问方法或引用该类的任何可访问字段,就像您使用任何其他引用一样。例如:super.doSomething()super.x

于 2013-04-24T02:38:00.383 回答
5

java中的每个类都有一个超类。当您使用super关键字时,您指的是超类,并且点运算符super将使您可以访问超类的属性和方法。

super()是超类的构造函数。当您覆盖子类中的构造函数时,您必须先调用super(),然后才能执行自己的逻辑,如果不这样做,编译器将代表您插入对无参数构造函数的调用。(有时没有,代码编译失败)

在 Java 中,调用构造函数会为您提供类的实例,但在执行 a 时却不是一回事super(),因为在执行 a 时不会创建超类的单独实例super()。因此,whileMyClass().doSomething()是一个完全有效的调用,super().doSomethingElse()但不是。

于 2013-04-24T02:25:41.913 回答