gpt4 book ai didi

java - Java 中的动态和静态绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 09:15:44 25 4
gpt4 key购买 nike

我在学习中遇到了这段代码:

class Shoe{
public Shoe(){
this("This is a shoe");
System.out.println("Base Class");
}
public Shoe(String s){
System.out.println(s);
}
}

class TennisShoe extends Shoe{
public TennisShoe(){
this("This is a Tennis Shoe");
System.out.println("Derived Class");
}
public TennisShoe(String s) {
super("Exam 1");
System.out.println(s);
}
}

class WhiteTennisShoe extends TennisShoe{
public WhiteTennisShoe(String s){
System.out.println(s);
}
}

class Test{
public static void main(String args[]) {
new WhiteTennisShoe ("A white tennis shoe is created");
}
}

我以为输出会是:

A white tennis shoe is created

因为只调用了子类 WhiteTennisShoe 的构造函数。然而,实际输出是完全不同的:

Exam 1
This is a Tennis Shoe
Derived Class
A white tennis shoe is created

这是动静态绑定(bind)的原因吗?还是纯java继承?我真的很困惑。几天来,我一直在寻找有关静态和动态绑定(bind)的很好的解释,但一无所获。

最佳答案

简单的java继承。

子类的每个构造函数都需要调用它扩展的类的构造函数。如果您不自己进行调用,则会为您添加对扩展类的默认构造函数的调用。

在例子中:

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

等同于:

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

关于java - Java 中的动态和静态绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772657/

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