解释这个继承Java程序的输出?
伙计们,你能给我解释一下这个例子的结果是什么吗解释这个继承Java程序的输出?,java,Java,伙计们,你能给我解释一下这个例子的结果是什么吗 Exam1 This is Tennis Shoes derived class This is a white Tennis Shoes is created 如果您能向我解释一下,在我们创建了一个白色网球鞋的对象之后,到底发生了什么,以及发生了什么。 请不要告诉我做你的家庭作业什么的,我只是在准备考试,我想这是一个老问题 代码如下: class Shoes{ public Shoes(){ this("
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");
}
}
在Java中,如果不指定要在类中调用的父构造函数,则会在实例化过程中调用默认的父构造函数。在您的情况下,创建新的WhiteTennisShoes
将自动调用默认的父构造函数,即TennisShoes()
。这将调用TennisShoes()
,然后调用Shoes(String)
在本例中需要记住的重要一点是,在Java中,实例化一个类会调用该类和每个父类的构造函数。您可以指定要调用的父构造函数,如果不指定,则会调用默认的无参数父构造函数。在Java类中未指定要调用的父构造函数时,会在实例化过程中调用默认的父构造函数。在您的情况下,创建新的WhiteTennisShoes
将自动调用默认的父构造函数,即TennisShoes()
。这将调用TennisShoes()
,然后调用Shoes(String)
在本例中需要记住的重要一点是,在Java中,实例化一个类会调用该类和每个父类的构造函数。您可以指定要调用的父构造函数,如果不指定,则会调用默认的无参数父构造函数。您可以调用WhiteTennisShoes构造函数。此构造函数没有super()调用,因此编译器会为您插入一个,因此它要做的第一件事就是调用其超类的no-arg构造函数:TennisShoes
没有任何参数的TennisShoes构造函数调用另一个以“This is Tennis Shoes”作为参数的构造函数。此构造函数所做的第一件事是以“Exam1”作为参数调用其超类的构造函数
因此,以Exam1作为参数调用Shoes构造函数,并输出Exam1。然后TennisShoes构造函数继续执行并输出其参数:“这是网球鞋”。然后TennisShoes无参数构造函数继续执行并输出“派生类”。然后WhiteTennisShoes构造函数继续执行并输出其参数:“这是一个创建的白色网球鞋”。调用WhiteTennisShoes构造函数。此构造函数没有super()调用,因此编译器会为您插入一个,因此它要做的第一件事就是调用其超类的no-arg构造函数:TennisShoes
没有任何参数的TennisShoes构造函数调用另一个以“This is Tennis Shoes”作为参数的构造函数。此构造函数所做的第一件事是以“Exam1”作为参数调用其超类的构造函数
因此,以Exam1作为参数调用Shoes构造函数,并输出Exam1。然后TennisShoes构造函数继续执行并输出其参数:“这是网球鞋”。然后TennisShoes无参数构造函数继续执行并输出“派生类”。然后WhiteTennisShoes构造函数继续执行并输出其参数:“这是一个创建的白色网球鞋”。当您创建类型为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()
现在,tennieshoes()
确实在第一行调用了另一个构造函数。当前的调用堆栈现在是
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
该构造函数使用参数“Exam1”
调用单参数超级构造函数。调用堆栈是
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")
Object()
由于Shoes
的单参数构造函数不调用构造函数,因此现在调用超类对象的隐式构造函数;调用堆栈是
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")
Object()
之后,调用堆栈展开,并按顺序调用所有打印:
Shoes(“Exam1”)
打印“Exam1”
TenniesShoes(“这是网球鞋”)
打印“这是网球鞋”
tennieshootes()
打印“派生类”
WhiteTennisShoes(“这是一个白色…”)
打印“这是一个白色…”
main
不打印任何内容并退出创建类型为
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()
现在,tennieshoes()
确实在第一行调用了另一个构造函数。当前的调用堆栈现在是
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
该构造函数使用参数“Exam1”调用单参数超级构造函数。调用堆栈是
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")
Object()
由于Shoes
的单参数构造函数不调用构造函数,因此现在调用超类对象的隐式构造函数;调用堆栈是
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")
main(..)
WhiteTennisShoes("This is a white ...")
TenniesShoes()
TenniesShoes("This is Tennis Shoes")
Shoes("Exam1")
Object()
之后,调用堆栈展开,并按顺序调用所有打印:
Shoes(“Exam1”)
打印“Exam1”
TenniesShoes(“这是网球鞋”)
打印“这是网球鞋”
tennieshootes()
打印“派生类”
WhiteTennisShoes(“这是一个白色…”)
打印“这是一个白色…”
main
不打印任何内容并退出<