Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';java中super和super()有什么不同?_Java_Super - Fatal编程技术网

什么';java中super和super()有什么不同?

什么';java中super和super()有什么不同?,java,super,Java,Super,像这样: public class class1 { public void xxx(){ super.getXXX(); super().getXXX(); } } java中的每个类都有一个超类。当您使用super关键字时,您指的是super类,super上的点运算符将允许您访问该super类的属性和方法 super()是超类的构造函数。在子类中重写构造函数时,必须先调用super(),然后才能执行自己的逻辑,如果不这样做,编译器

像这样:

public class class1 {   
    public void xxx(){

        super.getXXX();

        super().getXXX();

    }
}

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

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


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

二者都在子类中用作调用或引用其超类的方式

super()
是在构造函数或重写方法内进行的方法调用,用于调用超类的构造函数或超类的重写方法。在这些情况下,super()调用也可以接受参数

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

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


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

一个是super,另一个是super-dupper。说真的,那会编译吗?为什么不在你的问题中发布真正的代码呢?代码很简单,但实际上编译并演示了您的要求?@HovercraftFullOfEels在这种情况下,您可能是复制者。。。?“一个欺骗他人的人”@gutch:你可能在这一点上是对的。再说一次,你的代码无法编译。
super()
constructor调用只能在构造函数中调用,并且只能在构造函数的第一行调用。我投票认为这是一个正确的答案。我不知道是谁或为什么有人否决了它。“…你必须调用super()…”-是和否。必须调用超类构造函数,但它可能是隐式的。。。如果超类中有一个显式或隐式的无参数构造函数。@Hovercraft充满了EEL,这不是代码的问题。你的意思是你不能理解,仅仅因为代码没有编译?