2013-11-04 207 views
2

我正在学习,我整个这一段代码来:动态和静态绑定在Java中

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 

这是因为动态和静态绑定?或者它是纯粹的Java继承?我很困惑。我一直在寻找关于静态和动态绑定几天的很好的解释,但是我没有找到。

回答

2

简单的java继承。

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

在该实例中:

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

相同:

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

它是纯粹的Java继承。 每个Java构造函数都隐式插入super()作为其第一行,除非显式调用父构造函数,例如显式调用super(“Exam 1”)的第二个TennisShoe构造函数中。

参见:Subclass Constructors