今天在csdn上看到這個帖子,覺得很有意思就弄到這里來
這個是關于子類、父類的構造方法調用的問題。經過大家的討論終于看到結果了,而且我今天也更加深入
了解了構造方法。
貼段程序先:
public?? class? Target? extends? Depend?? {
???
????? int? i? =?? 30 ;
???? public? Target()? {
??????? print();
??????? i? =?? 40 ;
???????
???? }
????? void? print()? {
???????????
??????????? System.out.println( " Target=>? "?? +? i);
????
?????? }
???
???? public?? static?? void? main(String[] args)?? {
???????
?????? System.out.println(new? Target().i);
???? }
?
}
?
? class? Depend? {
???
???? int? i? =?? 10 ;
??? public? Depend()? {
???????
??????? print();
??????? i? =?? 20 ;
??? }
???? void? print()? {
??????? System.out.println( " Depend=>? "?? +? i);
??? }
???
}
運行結果是:
Target=>? 0
Target=>? 30
40
Target繼承Depend并且重載了print方法。
1、執行時,在調用Target的構造方法之前隱性調用Depend類的無參數構造方法;
2、Depend的構造方法中調用print方法,Target重載了print方法所以此時調用的是Target內的print方法
;
3、i為什么會是0?在調用構造方法的時候int變量都被都被初始化為0,所以輸出為Target=〉0;
4、Target的構造方法在調用print方法前將i的值賦值為30,調用print方法時輸出Target=>? 30;
如果將int? i? =?? 30 ;注銷掉后Target內調用的都是Depend內的i(上面的使用的i的值是Target自己的
)
此時輸出結果為
Target=>? 10
Target=>? 20
40
Target=>? 10:Depend構造方法內調用的print方法是Target內重載的,i此時已經被賦值為10,之后i被賦
值為20,Target的構造方法在調用print方法時取i = 2,Target=>? 20