關於子類和父類之間的繼承關系


/*父子類之間的繼承關系
* 1.子類繼承父類的關鍵字:extends
* 2.除外父類中的被private修飾的成員變量和方法不可以被子類繼承,其它都可以被子類繼承
* 3.子類繼承父類后又出現和父類相同的成員變量,則父類中的成員變量被隱藏,子類只能通過從父類繼承過來的方法去修改它
* 4.子類繼承父類中的方法,可以對其進行重寫,父類中的方法則被隱藏起來了。方法重寫規則為:
* (1)必須存在繼承關系 (2)重寫后的方法必須和父類保持一致(包括返回值類型,方法名和修飾符列表)
* (3)重寫后的方法的訪問權限不得低於父類中的方法的訪問權限,可以更高
* 5.子類除繼承父類中的成員變量和方法之外,還可以自定義自己的成員變量和方法。
* 6.所有的類都是Object類的子類,因此可以稱Object類為超類
* 7.關於子類的上轉型對象:
* 將子類的賦值給父類的引用,這種情況被認為是子類的上轉型,子類對象也因此變為上轉型對象
* (1)子類的上轉向對象可以訪問父類中被隱藏的成員變量
* (2)子類的上轉型對象訪問父類中被隱藏的方法時,調用的依然是子類中重寫的方法。
* (3)對比子類和子類的上轉型對象之間的區別(關於訪問父類中的成員變量和方法)
* 子類的上轉型對象可以訪問:
* 從父類中繼承的變量;父類中被子類隱藏的變量;從父類中繼承的但未被重寫的方法
* 子類的上轉型對象不可以訪問:
* 從父類中繼承的已被子類重寫的方法;子類新增的成員變量和方法
* 子類可以訪問:
* 從父類繼承的成員變量和方法,除外父類中的私有變量和方法;
* 子類不可以訪問:
* 父類中被隱藏的成員變量和方法,以及父類中的私有變量和方法
* 8.對象的上轉型對象有點類似於面向對象中的多態。
* 9.關於final 關鍵字:
* (1)修飾成員變量時,被final 修飾的成員變量必須在聲明的時候就賦予初始值;並且不允許再做任何修改,包括在被子類繼承之后
* (2)修飾方法時,子類從父類中繼承的被final修飾的方法不允許重寫
* (3)修飾類時,被final修飾的類不可以被繼承,即沒有子類。
* 10.關於抽象類:abstract class 類名{}
* (1)抽象類和普通類類似,修飾符列表多了一個abstract,類體中可以有成員變量,普通方法和抽象方法
* (2)抽象類中的抽象方法沒有方法體,需要繼承該抽象類的子類重寫抽象方法,否則抽象類和抽象方法都毫無意義
* (3)抽象類不能實例化對象,必須由普通類去繼承它,抽象類中的屬性和方法的存在才具有意義
* (4)抽象類中也可以沒有抽象方法
* (5)abstract不可以用來修飾成員變量,並且抽象類中的成員變量必須賦予初始值
* (6)抽象類存在的意義:
* 將其它多個普通類中共同存在的屬性和方法,集中體現在一個抽象類中,並且這些類共同的需求又有一些小小的區別:例如計算一個柱體的體積,
* 而柱體的底又存在多種形狀的,但無論是哪一種形狀,都需要有計算面積的功能,因此可以將計算面積這一功能封裝在一個抽象類當中,讓不同形狀的底去
* 繼承該抽象類,並實現里面的抽象方法,這樣也使得每一個類型的底不用重讀寫計算面積的功能代碼,因此抽象類的使用也實現了代碼的復用性。
* 11.關於接口:
* 接口是一種特殊的抽象類,抽象類是一種不完全的抽象類,因為其里面可以不包含抽象方法,而接口里必須全部為成員必須全部是抽象的,
* 因此接口是一種特殊的,完全的抽象類
* (1)接口是一種抽象類,因此接口也是一種引用
* (2)修飾接口的修飾符: interface
* (3)接口支持多實現,即一個類可以同時實現多個接口,一個接口也可以同時被多個類實現
* (4)接口中的方法全部都是抽象的,並且必須是公開的(public),因此實現了接口的類必定要重寫里面全部的抽象方法;
* 語法格式:[public abstract] 返回值類型 方法名();
* (5)接口中的成員包括常量(沒有變量)和抽象方法,其中常量的聲明語法格式為:
* [public fianl static] 類型 常量名=常量值;
* (6)注意方法重寫的時候,不可以降低方法的訪問權限,只可以提高,為了方便不同的類都可以實現接口,因此接口中的方法全部都是公開的
* 所以實現了接口的類在重寫接口中的方法的時候也就不存在可以修改訪問權限的情況了。
* (6)接口存在的意義:接口類似抽象類,都是把其它幾個毫無關聯但是又具有相同需求的集合在一個接口當中,
* 這樣其它類就可以通過實現接口來達到各自的需求,而又不會存在關耦合度過高,代碼復用性低的缺陷,相反,抽象類和接口的優點就是降低程序的耦合度,
* 提高程序可擴展性,所以推薦面向抽象編程,實質上是推薦面向接口編程
* 12.抽象類和接口之間的區別:
* (1)抽象類中的成員可以是非抽象的,而接口中的成員則必須全部是抽象的
* (2)抽象類不支持多繼承,而接口支持多實現,即接口的可擴展性高於抽象類,一個類可以同時不同的接口里的不同的功能。
* 因此我們一般更多地采用面向接口編程的方式
* 13.關於構造方法:
* 構造方法的作用是方便實例化對象,在實例化對象的時候也可以向其傳遞參數。
* (1)構造方法分為有參構造和無參構造,一個類在沒有寫構造方法的情況下就是默認一個無參構造函數
* 類實例化對象其實就是根據這個構造方法創建的新對象。
* (2)有參構造函數是根據類中的屬性定義的,即可以在實例化對象的時候就給屬性賦予參數指定的值
* (3)構造方法不能夠被子類繼承。子類要想調用服了中的構造函數,需要使用super關鍵字
*14.關於super關鍵字:
* super關鍵字的作用:
* (1)子類可以使用super關鍵字操作父類中被隱藏的成員變量和方法(當子類中的成員變量和父類中的相同,子類重寫父類中的方法,
* 則父類中的成員變量和方法被隱藏),並且是在子類中的某個方法里面通過super去調用。
* (2)使用super 關鍵字可以調用父類中的構造方法。每當一個類實例化對象的時候,實際上都是在調用其構造方法
* 而子類在實例化對象的時候不需要首相實例化其父類就可以擁有父類的屬性和方法,原因是因為子類的構造方法的第一條語句是super();/super(參數列表);
* 即子類在調用自身的構造方法創建對象時,會先執行super();語句,調用父類中的構造方法首先創建父類對象,只是該對象沒有賦值給一個引用,但其實在
* 堆內存中已經為父類的實例化對象開辟了一個空間。
* (3)若子類中的構造方法的第一條語句沒有super();語句,則默認被隱藏起來了,實際上是存在的。
* (4)構造方法中super();語句只能有一條,super()可以帶參數也可以不帶參數,只是創建出來的父類對象上有些差別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM