1. 程式人生 > >面向物件三大特性—繼承

面向物件三大特性—繼承

什麼是繼承

在現實生活中,經常發生子承父業的事情,同樣的,在java中也有類似的“子承父業”的情況。也就是我們今天要說的繼承。如果說我們在Java專案中有兩個類的功能極其相似或者一個類的功能是在另一個類的基礎上實現的。那麼我們寫兩份比較相似程式碼就極大的浪費了我們的時間和經歷。那麼我們能不能將相同的部分寫進一個專案中,於其相關的專案將這部分程式碼通過一定的方式拿來使用呢?這完全是可以的,就是繼承。

繼承有哪些特點

上文中提到了“子承父業"但是我們沒有聽到過父承子業的吧,除此之外,我們一個人只能有一個親生父親吧。同樣的,在java中繼承也有著同樣的特性:單繼承,單方向。也就是說一個類只能有一個父類,只能子類繼承父類的公共屬性和方法,父類不能獲得子類的屬性和方法。那父類只能有一個子類嗎?答案是否定的。父類可以有多個子類(如果只能有一個我們為啥不直接寫呢)。

如何實現繼承

繼承的關鍵字是 extend 也就是說在類名後接extend接父類類名。完成繼承後我們可以得到父類的公共方法和屬性(注意:私有的成員變數和方法是不能獲得的),程式碼例項如下

通過上述程式碼我們可以看到,cat類繼承了animal類的屬性(leg和tail),在測試中,我們直接呼叫cat類,成功獲得了animal的屬性並列印成功。

重寫

當我們繼承之後,發現父類的方法不能完全滿足或與我們想要的功能時,怎麼辦呢。這時我們就會要用到重寫功能。與其字面意思相同,重寫就是將父類中已有的方法進行重新書寫(更改或完全刪掉重寫),具體程式碼示例如下;

我們可以看到在第一個子類中,我們沒有改變其原有結構,在下面添加了會西紅柿炒蛋的列印語句,第二個子類中我們將super.skill(父類中方法)刪掉,我們發現在呼叫對應的方法時,並沒有打印出父類中的方法,也就是說,這個super代表的父類的物件(父類也稱為超類),且刪除後能夠執行。所以當我們要完全重寫父類方法時,可以將該句刪除。

this、super、this(),super()分別代表什麼

到目前為止,我們已經接觸到了除this()外的所有關鍵字,那他們都是什麼意思呢?

this:表示當前類物件(成員變數與區域性變數重名時,加在類名前可表示當前類物件)

super:表示父類物件,重寫時可以直接.方法代表父類方法。

super():表示父類構造方法。(為什麼沒有繼承關係的類建立構造方法時也會有super?因為所有類有一個共同的父類object)

this():表示當前類的構造方法。

過載和從寫的區別

在學繼承之前我們就已經學過過載,那過載和重寫有什麼區別呢?

過載:方法名相同,引數不同(引數型別,引數個數,引數順序)與返回值無關

重寫:需要以繼承為基礎,可以重寫父類方法(公共方法),其方法名與引數需與父類完全相同。