1. 程式人生 > 實用技巧 >【Python 1-16】Python手把手教程之——類Class的繼承、父類、子類

【Python 1-16】Python手把手教程之——類Class的繼承、父類、子類

面向物件三大特性

封裝

概念:屬性私有化(private),提供setXXX和getXXX。
作用:保證資料的合理。
一般情況下,我們的程式設計要追求"高內聚,低耦合"
    高內聚就是類的內部資料操作細節自己完成,不允許外部干涉
    低耦合:僅暴漏少量的方法給外部使用。
封裝的意義: 
	 1. 提高程式的安全性,保護資料
     2.隱藏程式碼的實現細節
     3.統一介面
     4.系統可維護增加了

繼承

概念:類與類之間,特徵和行為的贈與或獲得。
滿足繼承關係的前提:二者必須具備is a關係。
語法:class 子類 extends 父類{}
建立子類物件 = 父類共性 + 子類獨有
繼承的好處:減少程式碼的冗餘,提高程式碼的複用性。
繼承的特點:
	java只支援單繼承,不支援多繼承,但可以多層繼承,形成整合體系結構。
    子類繼承了父類,就會擁有父類的所有方法

不可被繼承

1.構造方法
2.private修飾的屬性和方法
3.父子類不在同一個package中,使用default修飾的屬性和方法

Object類

概念:在java中,所有的類都預設直接或間接繼承Object類
特點:
	1.所有的類要麼直接繼承要麼間接繼承。
	2.所有的物件都可呼叫Object類中的方法。
	3.Object可以作為形式引數:能夠接收任意物件(引用資料型別)。
	4.Object可以作為返回值型別:能夠返回任意物件(引用資料型別)

super關鍵字

用法:
	super.成員方法():表示呼叫父類中的成員方法
	super.屬性:表示呼叫父類的屬性
	super()和super(實參):表示呼叫父類的構造方法
注意:如果構造中沒有this()或者this(實參)或者super(實參),每一個構造方法中首行都隱式存在super()。

super和this的區別

代表的物件不同:

	this:本身呼叫者這 個物件

	super:代表父類物件的應用

前提:

	this:沒喲繼承也可以使用	

	super:只能在繼承條件才可以使用

構造方法:

	this() ; 本類的構造;

	super():父類的構造!

方法的重寫

重寫需要有繼承關係,子類重寫父類的方法!
重寫都是方法的重寫,和屬性無關
    1.方法名必須相同
    2.引數列表必須相同
    3.修飾符:範圍可以擴大但不能    public>Protected>Default>private
    4.丟擲的異常:範圍,可以被縮小,但不能擴大:ClassNotFoundException --> Exception(大)
重寫,子類的方法和父類必須要一直:方法體
為什麼要重寫?
	父類的功能子類不一定需要,或者不一定滿足!

多型

多型就是方法的多型
一個物件的實際型別是確定的,但可以指向物件的引用的型別有很多(父類,有關係的類)
概念:父類引用指向子類物件。
注:  父類引用只能呼叫父類中所定義的屬性和方法,子類獨有的屬性和方法不可呼叫。
	二者必須存在繼承關係
多型中的方法覆蓋:
	子類覆蓋父類中的方法,使用父類引用呼叫該方法,執行的是覆蓋之後的
多型存在的條件
1. 有繼承關係
2. 子類重寫父類方法
3. 父類引用指向子類物件
多型的應用
場景一:父類引用應用在形式引數上,能夠接收 本類型別 + 所有子類型別。
場景二:父類型別應用在返回值型別上,能夠返回 本型別 + 所有子類型別。
好處:
	降低耦合性
	遮蔽子類間的使用差異
向上轉型、向下轉型
向上轉型(裝箱):父類引用中儲存的是子類物件。
    	裝箱:將基本型別用它們對應的引用型別包裝起來
		舉例:Animal a = new Dog();
		注:父類引用只能呼叫父類中的屬性和方法。
		
向下轉型(拆箱):將父類引用中所儲存的真是型別強制轉換為自身型別。
    	拆箱:將包裝型別轉換為基本資料型別
		舉例:Dog d = (Dog)a;
		注:只有轉換為子類真實型別,才可以呼叫子類中獨有屬性和方法。
instanceof
語法:引用 instanceof 型別
作用:判斷引用中儲存的真實型別是什麼