7 面向對象的三大特征
面向對象的三大特征為:封裝、繼承、多態。
1 封裝(encapsulation)
1.1 廣義上的封裝就是包裝,可以將方法看作是對為完成特定功能的代碼的封裝,可以把類看作對屬性和方法的封裝....
狹義上的封裝:將屬性私有化,然後提供公有的getter和setter方法以供訪問。
封裝的優點:
1)隱藏了實現細節,簡化開發
2)安全
3)提高了代碼的可維護性和可擴展性。
步驟:
1)將屬性私有化,將修飾符修改private的
2)提供公有的訪問方法:getter方法:取值,setter方法:賦值
3)添加訪問權限控制
1.2 四種修飾符
public: 項目下所有的類都能使用
protected: 本類,同包下的其他類或其他包下子類
默認的(default/friendly): 本類中訪問、同包下其他類訪問
private:只能在本類中訪問
屬性,方法和構造方法的修飾符:public/protected/默認的/private
類的修飾符:public/默認的
2 繼承(inheritance)
2.1 繼承代表了一種is-a關系,如果說A是B,也就可以說A繼承了B
父類更加通用、子類更加具體
優點:提高代碼的復用性。
java中實現繼承使用extends關鍵字
[修飾符] class 類名 extends 父類{
}
子類可以繼承父類的非私有的屬性和方法,不能繼承父類的構造方法。子類無法繼承父類的構造方法,但可以通過super關鍵字進行調用。
java中繼承是屬於單繼承,一個類只能有一個父類,但是一個父類可以有多個子類。C++中可以存在多繼承,java可以通過接口實現多繼承。
一旦兩個兩個類建立了繼承關系,子類就可以擁有父類非私有的屬性和方法。
2.2 方法的重寫
方法的重寫(override):一般發生在父子之間,子類重寫的方法應該滿足以下條件:
1)子類的方法名,返回值類型,參數列表必須與父類相同
2)子類的修飾符範圍>=父類的修飾符範圍
修飾符範圍:public>protected>默認
註意:一旦子類重寫了父類中的方法,創建子類實例後,調用子類重寫後的方法。
* 重寫(override)和重載(overload)區別:
1)重寫一般發生在父子之間,重載一般在同一個類中。
2)重寫要求方法名,返回值類型,參數列表必須與父類相同,並且修飾符範圍大於等於父類方法的修飾符範圍。
重載方法名相同,參數列表不同,與返回值類型及修飾符無關。
3)作用不同
重載主要是為了提供一種同名方法不同參數的能力(可以讓一個類用於多個同名的方法)
重寫主要是為了結合多態使用,提高程序擴展性和可維護性。
2.3 super關鍵字
super關鍵字:代表直接父類的引用,類別this關鍵字進行記憶。
用法:
1)可以使用super關鍵字訪問父類的屬性: super.屬性名
2)使用super關鍵字訪問父類的方法:super.方法名()
3)使用super關鍵字調用父類的構造方法,但是必須作為構造方法的第一行語句存在。
註意:在靜態方法中不能使用super和this關鍵字。
2.4 Object類
java.lang.Object類:所有類的基類
一個類如果沒有顯式使用extends繼承其他類,這個類繼承了Object類,在任何類的對象中使用Object中的方法
常用的方法:
getClass() 返回此 Object 的運行時類。主要用於反射機制。
toString() 返回該對象的字符串表示。如果使用System.out.println(stu);默認調用stu.toString()
[email protected]==》
cn.zzsxt.oop6.Student(包名.類名)+@+16進制表示的hashcode碼
toString()方法經常在子類中重寫。
2.5 父子類中代碼的執行過程
靜態代碼塊在使用類時執行。 普通代碼塊在創建對象時執行。
父類的靜態代碼塊>子類靜態代碼塊>父類的代碼塊>父類的構造方法>子類的代碼塊>子類的構造方法
在創建子類時,先調用父類的構造方法先創建父類的實例,在創建子類的實例。
2.6 equals和==的區別
==在比較內容時分為以下兩種情況:
1)使用==比較基本數據類型,做的值的比較,值相同返回true,否則返回false
2)使用==比較引用類型,比較不是內容是否相同,而是兩個對象的引用(地址)是否相同,如果指向相同的地址返回true,否則返回false。
equals():比較內容是否相同。
Object中的equals方法本質比較引用(==),如果需要按照內容進行比較是否相同,就需要重寫Object中equals方法。
3 多態(polymorphism)
3.1 生活中的多態:同一種物質,因環境不同而展現不同的形態。比如:水在不同環境下可以展現為固態,液態和氣態。
程序中的多態:同一種接口因不同的實現而執行不同的操作。
優點:提高了代碼的擴展性和可維護性。
多態在java中實現的前提: 1.繼承 2.方法的重寫 3.父類引用指向子類
多態在java中實現的步驟。
1)建立繼承關系
2)在編譯時將父類作為形參(範圍大一點,模糊一點)
3)在運行時將子類對象作為實參,執行的子類重寫後的方法。
3.2 類型轉換
1)子類轉換為父類--->自動轉化 (向上轉型)
a.子類向上轉型成父類,上轉型對象不能操作子類新增的成員變量和方法。
b.上轉型對象可以操作子類繼承或重寫的成員變量和方法
c.如果子類重寫了父類的某個方法,上轉型對象調用該方法時,是調用的重寫方法。
2)父類轉換為子類:強制轉換(向下轉型)
3.3 instanceof運算符
作用:判斷對象是否為指定類型的實例。如果是指定類型的實例返回值為true,否則返回false
防止在類型轉換時出現ClassCastException異常。
語法: 對象 instanceof 類型
if(a instanceof Cat){
Cat c=(Cat)a;
}
7 面向對象的三大特征