繁体   English   中英

Java中超类的构造方法

[英]Relating Constructor of Super Class in java

如果我创建一个没有构造函数的子类对象,那么我知道编译器将隐式提供默认构造函数。 如果我在子类中创建一个构造函数,并尝试使用super关键字访问超类构造函数,现在,超类中没有构造函数,该怎么办? 编译器还会为超类提供默认的构造函数吗?

是的,如果没有指定的构造函数,则始终有默认的空构造函数

编译器是否还为超类提供了默认构造函数?

无论是否存在需要它的子类,都将使用默认构造函数。 当编译父对象时提供默认值,而不是稍后提供。

...如果我创建了子类构造函数并尝试使用super关键字访问超类构造函数,而超类中没有构造函数,该怎么办?

但这确实 :默认值之一。

就像这样

让我们说说Object是Java中最高级的类。如果您打开一个编辑器并仅创建一个类,则假定它正在扩展Object。 Java中的每个类都从Object扩展。 如果您不编写自己的构造函数,则编译器将提供一个。

但是,如果您编写自己的构造函数,比如说一个带有一个参数的构造函数,则编译器将不会为您提供任何构造函数。

现在说您扩展了上面的类,然后编译器会抱怨您说超类没有默认构造函数,而是自定义构造函数,因此您需要为此子类创建一个构造函数,因为第一个构造函数被称为从最上层开始是OBJECT的类,然后继续进行下去。

希望这能全面回答,谢谢。

是的,即使您没有显式声明超级也总是会发生

   public class FatherTest {

   }


public class SonTest extends FatherTest{

public SonTest(String sonName){
    super(); // this will always occurs

    }

}

如果您不为类编写构造函数,则编译器将为您隐式添加一个空的构造函数。

这意味着:

public class X {
}

与此相同:

public class X {
    public X() {
        // there's also an implicit super(); added here, but that's not directly relevant
    }
}

如果超类没有显式构造函数,则将向其添加隐式默认构造函数。 因此,您的super()将调用它。

如果超类只有一些带有参数的构造函数。 然后,子类中的super()将不会编译。 您必须显式地使用已定义的超类构造函数super(param1, param2, ...) ,因为如果不调用super()则将调用它。

暂无
暂无

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

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