學習Java語言的過程中,對於多態的理解是非常關鍵的,理解了多態也就意味著打開了理解Java各種「抽象」的大門。
所謂的「多態」,簡單的理解就是對象在不同情況下的不同表現,具體體現在定義和功能兩個方面,簡單的總結一下,多態可以用「三個定義和兩個方法」來總結。三個定義分別是父類定義子類構建、接口定義實現類構建和抽象類定義實體類構建,而兩個方法分別是方法重載和方法重寫。
方法重載的概念比較好理解,簡單的說,就是在同一個類中,定義了多個方法,具有相同的方法名稱和不同的參數列表。方法重載只看名稱和參數列表,其他的都不看,包括返回值類型、屬性修飾符、範圍限定等,這些都不影響方法重載的概念。
方法重寫可以用「一個前提、三個相同和兩個規定」來總結,前提是在繼承體系結構下,三個相同代表子類中定義的方法與父類中的方法,具有相同的名字、參數列表和返回值類型,兩個規定分別是子類方法的範圍限定不能比父類方法的範圍小,以及不能拋出更多的異常。當然,final類型的方法和static類型的方法是不能被重寫的。
父類定義子類構建還是比較好理解的,但是如果採用了這種定義方式,也就意味著對象本身並不能調用子類獨有的方法,而如果調用的方法恰好覆蓋了父類中的方法,則還涉及到「虛方法」的概念,實際上執行的是子類方法體中的功能語句。
接口定義實體類構建是Java中非常常見的一種多態形勢,而且由於接口屬於全抽象方式,所以這種方式可以在很大程度上提升程序的「健壯性」,也是比較推薦的編程方式。採用接口定義類構建的方式,可以在很大程度上提升代碼的可復用性。
抽象類定義實體類構建是接口定義方式的一種擴展,通常可以用在代碼的模塊內部,從而提升代碼的內聚性。
我從事網際網路行業多年,目前也在帶計算機專業的研究生,主要的研究方向集中在大數據和人工智慧領域,我會陸續寫一些關於網際網路技術方面的文章,感興趣的朋友可以關注我,相信一定會有所收穫。
如果有網際網路、大數據、人工智慧等方面的問題,或者是考研方面的問題,都可以在評論區留言!