2016-10-12 147 views
1
public class NewSeqTest { 
    public static void main(String[] args) { 
    new S(); 
    new Derived(100); 
    } 
} 


class P { 
    String s = "parent"; 
    public P() { 
    test(); 
    } 
    public void test() { //test 1 
    System.out.println(s + " parent"); 
    } 
} 

class S extends P { 
    String s = "son"; 
    public S() { 
    test(); 
    } 
    @Override 
    public void test() { //test 2 
    System.out.println(s + " son"); 
    } 
} 

abstract class Base { 
    public Base() { 
    print(); 
    } 
    abstract public void print(); 
} 

class Derived extends Base { 
    private int x = 3; 
    public Derived(int x) { 
    this.x = x; 
    } 
    @Override 
    public void print() { 
    System.out.println(x); 
    } 
} 

//輸出構造函數和抽象類中的java調用方法?

 null son 

    son son 

    0 

我的問題是
1.爲什麼P構造打印 「空兒」;我認爲是「空父母」?

2爲什麼可以抽象類基地執行在構造抽象方法打印()?

對於代碼格式感到抱歉,我不知道如何正確使用它。

回答

2
  1. 你重寫方法test在子類S,你要構造S類型的對象。所以在超類的構造函數中,當調用test()時,它調用子類S的覆蓋版本test()。這是凌駕的重點。

  2. 同1的方法print摘要Derived類,你要構造的不BaseDerived實例。 (這是非法的說new Base()對於你提到的原因:你不能調用一個抽象方法)

0
  1. 執行new S();原因P構造運行test()。它執行重寫test()S,其中打印s。它使用Ss這是因爲S的構造函數的P構造後執行尚未初始化。
    2.相同的答案爲1重寫print()執行,但x尚未初始化。


btw:嘗試使用調試器並逐步運行程序以遵循執行路徑。