我在学习时遇到了这段代码:
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/