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

标签 java inheritance dynamic binding static

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

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/

相关文章:

java - GSON 序列化多态对象,类型存储在不同的对象中

java使用递归打印项目列表似乎效率低下

JavaScript - 出于什么原因......继承

python - 需要帮助重写函数 QWebPage.userAgentForUrl()

java - 在final方法中获取 "child"对象的Class?

javascript - getElementsByClassName 用于动态创建的元素

java - 将关系转换为面向对象的最佳方法是什么?

java - eclipse 中的可执行 jar 无法使用包内的图像...有时

dynamic - 将构建参数传递给 .wxs 文件以动态构建 wix 安装程序

C++ 访问静态数组与新数组之外的边界?