⑴ java 子類繼承父類 可以直接調用父類屬性和方法 為什麼還要用多態
舉個例子:
父類:A
子類:A1
子類:A2
父類中定義了一個方法method:,類A1和類A2有不同的實現,這是代碼中定義一個類A,那麼可以直接調用A的a方法即可,不用關心用A1還是A2去實例化的這個A對象,這就是多態的特性
A a;
a = new A1();或a = new A2();
a.method();只要改變這個a的實例化方式,就能執行不同對象的方法。
⑵ JAVA中,子類將繼承父類的所有屬性和方法么~為什麼
是的,子類將繼承父類的非私有的屬性和方法。
在JAVA中,子類繼承父類的所有方法和屬性(構造方法要用關鍵super([參數])調用);繼承是JAVA中一個重要的特色,便於程序的編寫,提高代碼的重用性。
1、如果給子類i提供get和set通過get調用的自然是子類的。
2、如果給父類和子類分別提供get和set,調的仍然是子類的,因為方法被重寫。
(2)java調用父類屬性擴展閱讀
在繼承中用到super調用父類的構造
privateStringname;
privateStringsex;
publicxinxin1(Stringname,Stringsex)
{
this.name=name;
this.sex=sex;
}
publicvoidhello(){
System.out.println(「嗨!我是」+name+」我是」+sex+」孩」);
}
⑶ java中重寫方法中調用父類的屬性
哥們你看好了,我和你一樣也是初學者,你的問題,也是前幾天我的問題;
這玩意我在Java群裡面也問過,搞了十年Java的也說不出個123來還動用了什麼debug測試工具,當然這個玩意以後我們也會用到!
我告訴你步驟怎麼回事:
當你newY的時候,注意,還沒有產生對象的時候,就執行了一個動作就是載入CLASS文件這個動作!
class文件已載入,就開始動用分配內存的動作,懂??
3.此時分配的對象有,方法區,父類方法,和子類方法:(這里說的覆蓋其實只是就近原則而已,其實沒有覆蓋如果你不理解,你可以看看Java內存分析)
4.還分配了成員變數,在堆裡面分配,注意:(堆內存,分配了子類和父類變數其實都有的,是劃分開的切記:兩個類裡面的i都給劃分了空間)
5.此時堆內存的所有變數,都是默認值,int就是0;這個步驟稱為:隱式初始化!以上是載入class後就發生的動作懂了?
6.然後子類繼承了父類,父類動作必然先執行父類裡面的構造函數,開始執行初始化動作
(注意:構造函數是用來初始化動作的,能給本類對象初始化,也能給子類對象初始化切記!)
7.父類,啟用構造函數先把自己的i=2給賦值完畢(顯示初始化動作);
就開始執行構造函數裡面的其他語句;這里就是你寫的那個方法display();
父類讀這個方法的時候,回去方法區裡面找方法,他優先找子類,如果子類沒有,在找他自己的,此刻子類是有的,也稱之為覆蓋
(說明一下,其實父類方法也在的)
8.此刻調用的子類方法,子類裡面調用了i,(此時父類的i已經是2了,但是子類i還是0,懂了?但是方法找變數的時候會優先找子類懂了?當然k也是0了)
9.父類讀完你這個調用以後就會把子類所有的成員變數初始化完成,稱之為(顯示初始化動作,就是我們能看的見的數字)
10.如果你在new完成以後,你在調用,你會發現,都是有值的了!
11.補充下:哥們純手工靠記憶敲打出來的;
這個是我個人糾結了好幾天以後總結的,總結的不到位還請指點,有大佬指引我,遇見這問題可以先記起來,以後學到多線程,很容易就可以理解!
祝你Java越來越厲害,順便也期望我也一樣吧,呵呵!!