今天在csdn上看到這個(gè)帖子,覺得很有意思就弄到這里來
這個(gè)是關(guān)于子類、父類的構(gòu)造方法調(diào)用的問題。經(jīng)過大家的討論終于看到結(jié)果了,而且我今天也更加深入
了解了構(gòu)造方法。
貼段程序先:
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);
??? }
???
}
運(yùn)行結(jié)果是:
Target=>? 0
Target=>? 30
40
Target繼承Depend并且重載了print方法。
1、執(zhí)行時(shí),在調(diào)用Target的構(gòu)造方法之前隱性調(diào)用Depend類的無參數(shù)構(gòu)造方法;
2、Depend的構(gòu)造方法中調(diào)用print方法,Target重載了print方法所以此時(shí)調(diào)用的是Target內(nèi)的print方法
;
3、i為什么會(huì)是0?在調(diào)用構(gòu)造方法的時(shí)候int變量都被都被初始化為0,所以輸出為Target=〉0;
4、Target的構(gòu)造方法在調(diào)用print方法前將i的值賦值為30,調(diào)用print方法時(shí)輸出Target=>? 30;
如果將int? i? =?? 30 ;注銷掉后Target內(nèi)調(diào)用的都是Depend內(nèi)的i(上面的使用的i的值是Target自己的
)
此時(shí)輸出結(jié)果為
Target=>? 10
Target=>? 20
40
Target=>? 10:Depend構(gòu)造方法內(nèi)調(diào)用的print方法是Target內(nèi)重載的,i此時(shí)已經(jīng)被賦值為10,之后i被賦
值為20,Target的構(gòu)造方法在調(diào)用print方法時(shí)取i = 2,Target=>? 20