gpt4 book ai didi

java - 解释一下这个 Inheritance Java 程序的输出?

转载 作者:行者123 更新时间:2023-12-02 00:36:08 25 4
gpt4 key购买 nike

伙计们,你能向我解释一下这个例子的输出为什么是:

  Exam1
This is Tennis Shoes
derived class
This is a white Tennis Shoes is created

如果你能向我解释一下在我们创建白色网球鞋对象之后到底发生了什么以及发生了什么。请大家不要告诉我做作业或我正在准备考试的事情,这是一个老问题。

代码如下:

class Shoes{
public Shoes(){
this("you have created a shoes Object");
System.out.println("This is the base class");
}

public Shoes(String s){
System.out.println(s);
}
}

class TennisShoes extends Shoes{
public TennisShoes(){
this("This is Tennis Shoes");
System.out.println("derived class");
}

public TennisShoes(String s){
super("Exam1");
System.out.println(s);
}
}

class WhiteTennisShoes extends TennisShoes{
public WhiteTennisShoes(String s){
System.out.println(s);
}
}

class ConstructorPrintingTester{
public static void main(String[] args){
WhiteTennisShoes shoesObj;
shoesObj = new WhiteTennisShoes("This is a white Tennis Shoes is created");
}
}

最佳答案

当您创建 WhiteTennisShoes 类型的对象时,会执行其构造函数:

public WhiteTennisShoes(String s){
super(); // This line is automatically inserted
System.out.println(s);
}

由于每个构造函数必须在第一行调用 super 或另一个构造函数,这样做会使 Java 自动调用无参数的 super 构造函数,因此会调用 arity 0 的 TennisShoes 构造函数。当前的调用堆栈是

main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()

现在,TenniesShoes() 确实在第一行调用了另一个构造函数。当前的调用堆栈现在是

main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")

该构造函数使用参数“Exam1”调用单参数 super 构造函数。调用堆栈是

main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")

由于 Shoes 的单参数构造函数不调用构造函数,因此现在调用父类(super class) Object 的隐式构造函数;调用堆栈是

main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")
Object()

之后,调用堆栈被展开并按顺序调用所有打印:

  1. Shoes("Exam1") 打印 "Exam1"
  2. TenniesShoes("This is Tennis Shoes") 打印 "This is Tennis Shoes"
  3. TenniesShoes() 打印 “派生类”
  4. WhiteTennisShoes("这是白色...") 打印 "这是白色..."
  5. main 不打印任何内容并退出。

关于java - 解释一下这个 Inheritance Java 程序的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7778086/

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