1. 程式人生 > >JAVA 學習筆記 繼承與方法重寫

JAVA 學習筆記 繼承與方法重寫

  什麼是重寫呢,在說重寫前就不得不提到繼承,用百度百科的解釋來說,Java繼承是面向物件的最顯著的一個特徵。繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的能力。

  看了百科的介紹,感覺頭大了,什麼是派生,什麼是吸收?其實吧,用白話講所謂繼承就是兒子用老子的東西,給了你就是你的,隨便用,但是一個子類只能有一個父類,咱們不能隨隨便便去認個乾爹什麼的,java同樣也不行,但是你可以有許許多多兄弟姐妹,筆者恰好趕上了計劃生育成了獨苗,但java沒趕上,所以java裡面的父類可以給多個子類進行繼承,頗有種開花結果枝繁葉茂的意味。

  在Java裡,使用extends來定義一個類的子類,格式是這樣的:

      class 子類名 extends 父類名{

......

}

舉個栗子:

class student extends people{

......

}

正如上面提到的開花結果枝繁葉茂,java繼承就是一個樹狀的結構(子子孫孫無窮盡也),而如果一個類中沒有extends關鍵字呢,那他就屬於Object的子類,也就是說我們經常寫的 class ABC 其實就是 class ABC extends Object

但是咱們得有一說一有二說二,老一輩的東西咱們也不能照單全收不是,咱們都有個人隱私更何況老爹老媽?比如人家年少時候的情書啊,情書啊,情書啊(我根本不想看哈哈哈哈)你也不能一下子就全繼承過來。這時候呢java就很人性化的告訴你了:用private關鍵字吧!(友好訪問許可權的成員變數也不會被繼承,也就是說只能繼承protected和public型別的)不用什麼998,只要在定義前面加上private,就相當於是給隱私上了鎖,兒子偷偷看的話小心打屁股!

class futher{

private String qingshu;

}

class son extends futher{

......

}

這時候son裡面就不能呼叫qingshu了,即使他已經完成了futher的繼承。



繼承說完了就該回歸主題說說重寫,所謂重寫呢就是我們宣告的成員變數的名字和父類繼承來的成員變數名字相同,這時候子類就會隱藏繼承的成員變數。也就是說你老爹把自己的車送你了,但是巧了,你有一輛一模一樣的,這時候你就糾結了,咱是用自己的車好呢還是用老爹的車好呢?最後你經過一陣子猶豫後還是決定了用自己的,畢竟自己賺錢買的有成就感嘛!

恰巧java和你的選擇一樣優秀,在我們宣告的成員變數的名字和父類繼承來的成員變數名字相同的時候,Java會隱藏掉所繼承的成員變數(自己動手豐衣足食!)

但是要是有了突發情況你需要用兩輛車,比如說來個自駕遊之類的,這是時候你總也不能不用老爹的車反而再買一輛新的把!(土豪們請不要說話社會壓力太大)也就是說你該義正言辭的使用繼承來的車了,Java重寫也是這樣,隱藏不代表覆蓋,該用時候還是要用!這時候super關鍵字閃亮登場,有了super你就可以訪問被隱藏的成員變數和方法啦。

class futher{

int car=12;

}

class son extends futher{

int car=10;

System.out.println(super.car);

}

有一天你想把老爹的車改裝一下參加個飆車大賽,於是老爹和你說了:兒子啊,我雖然把車給你了,用不用是你自己的問題,但是你也不能隨隨便便就給我改裝了吧?你說行,但是你老子怕你不聽話,於是就給自己的車加了個final關鍵字,這下好了,老老實實繼承不許做任何修改,飆車大賽也沒戲了。也就是說,final方法不允許重寫。(至於final類?連子類都沒有,絕後了)

final class A {

......

}

但是要注意,重寫父類方法的時候不允許降低方法的訪問許可權,但是可以提高訪問許可權(人往高處走嘛!)順序由高到低呢是這樣的:

public      protected     友好的     private

這樣一來有了和諧的繼承與重寫關係,Java大家庭又迎來了美好的一天(滑稽)。