Horse"); System.o-6ren">
gpt4 book ai didi

java - 两个 OO 问题 reg 构造函数

转载 作者:行者123 更新时间:2023-11-29 10:19:25 25 4
gpt4 key购买 nike

我有以下两个类:

public class Animal {
public Animal() {
this("Animal->Horse");
System.out.println("Class Animal default const");
}

public Animal(String name) {
this.name = name;
System.out.println(this.name);
}
String name;
}

public class Pegasus extends Animal {
public Pegasus() {
System.out.println("Class Pegasus default const");
}

public static void main(String[] args)
{
Animal animal = new Animal("Black Horse");
animal.name = "Pegasus";
Pegasus pegasus = new Pegasus();
pegasus.name = "White Horse";
}
}

当我执行这个时,我得到:

Black Horse
Animal->Horse
Class Animal default const
Class Pegasus default const

Q1: 为什么 Animal->Horseanimal 时只打印一次创建实例而不是在 pegasus 时创建实例创建?本质上它是从默认构造函数调用的。还有为什么不 animal实例打印 Class Animal default const

Q2:当我创建 pegasus例如,有没有办法让它不调用 class Animal的默认构造函数,只需调用 class Pegasus默认构造函数?

最佳答案

Q1: Why does Animal->Horse get printed only once when animal instance is created and not when pegasus instance is created?

相反 - 当您调用 Animal(String) 时,它被打印出来构造函数 new Animal("Black Horse") ,但是当您调用 Pegasus() 时它正在被打印构造函数依次调用 Animal()构造函数依次调用 Animal(String)构造函数。

我强烈建议您在 new Animal("Black Horse") 之后 添加一行诊断文本构造函数调用。这将帮助您更清楚地了解发生了什么。

Q2: When I create the pegasus instance, is there a way for it not to call class Animal's default constructor

它可以调用 Animal(String)构造函数例如与

super("Pegasus");

但它必须在 Animal 中调用一些 构造函数.当您创建一个类的实例时,所有其继承层次结构中的类都必须通过每个类中的至少一个构造函数进行初始化。

关于java - 两个 OO 问题 reg 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650482/

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