gpt4 book ai didi

java - Java 会自动调用抽象类的构造函数吗?

转载 作者:行者123 更新时间:2023-11-30 07:09:27 26 4
gpt4 key购买 nike

假设我创建了一个名为 animal 的抽象类,然后我创建了一个名为 dogs 的子类,它扩展了 animal。动物类里面写了一个构造方法。如果我决定实例化一个“狗”对象,是否也会自动调用动物类的构造函数?

如果有人能澄清并进一步扩展这一点,我们将不胜感激!

最佳答案

是的,可以调用抽象类的构造函数。为什么不?使用子类中的 super() 调用父类(super class)参数构造函数。如果您不使用 super(),那么默认情况下将调用父类(super class)的无参数构造函数。

如果你打电话

Dog dog = new Dog();

默认情况下,将调用父类(super class)默认构造函数[无参数构造函数]。

如果你打电话

Dog dog = new Dog("doggie1");

除非您在 Dog 的单参数构造函数中显式调用 super(),否则不会调用默认的父类(super class)构造函数。

试一试..

编辑:如果您不在 Dog 的单参数构造函数中调用 super(),那么也会调用默认的父类(super class)构造函数.

如果您想显式调用参数构造函数,比如父类(super class)的一个参数构造函数,您必须显式调用 super("value");

Animal() {
System.out.println("Animal superconstructor");
}

编辑02:

示例程序和输出

(1)

public class SubClass extends SuperClass {
SubClass(String str) {
super(str);
}

SubClass() {
}

public static void main(String[] args) {
new SubClass("hello");
}
}

abstract class SuperClass {
SuperClass() {
System.out.println("I am SuperClass()");
}

SuperClass(String str) {
System.out.println("I am SuperClass(String str)");
}
}

//output: I am SuperClass(String str)

(2)

public class SubClass extends SuperClass {
SubClass(String str) {
}

SubClass() {
}

public static void main(String[] args) {
new SubClass("hello");
}
}

abstract class SuperClass {
SuperClass() {
System.out.println("I am SuperClass()");
}

SuperClass(String str) {
System.out.println("I am SuperClass(String str)");
}
}

//output: I am SuperClass()

(3)

public class SubClass extends SuperClass {
SubClass(String str) {
}

SubClass() {
}

public static void main(String[] args) {
new SubClass();
}
}

abstract class SuperClass {
SuperClass() {
System.out.println("I am SuperClass()");
}

SuperClass(String str) {
System.out.println("I am SuperClass(String str)");
}
}

// output: I am SuperClass()

关于java - Java 会自动调用抽象类的构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23098139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com