Java面向對象(下)
Java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回
一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。
類的三大特性:封裝、繼承、多態;
封裝:把復雜的邏輯隱藏起來,對外只顯示一個接口。
繼承:子類繼承父類公開的屬性和方法,這樣可以減少代碼量。
多態:一種事物的多種形態。
一.類的繼承
1.繼承的概念
繼承用於描述事物之間的所屬關系,通過集成可以使所有事物之間形成一種關系體系。
通過extends來實現繼承,其中只允許單繼承,也就是說一個類只能有一個父類,可以好多各類共同擁有一個父類,也允許多重繼承。
2.重寫父類方法
(1)重寫與重載
重寫:在子類當中重新定義在父類當中已經存在的方法,且重寫後方法的權限不能低於父類當中的權限
重載:在一個類中,有些許方法名相同的方法,但他們參數的個數或者類型不一樣重寫是兩個類,重載一個類
(2)註意
父類當中的private修飾的方法和屬性不會被子類繼承到
3.super關鍵字
(1)概念
當子類重寫了父類方法時,子類無法訪問父類中的方法,於是乎就有了super
(2)作用
用super調用父類的屬性和方法
用super調用父類的構造方法,相當於this。(super和this要寫在構造方法第一行,必須是第一行)
二.final關鍵字
final修飾的類不能被繼承,修飾的方法不能被重寫,修飾的變量為常量不能被更改
三.多態
1.理解
同一個行為具有多個不同表現形式或形態的能力就是多態,人兩條圖走路,貓四條腿走路,蜈蚣n條腿走路這就是多態,多態體現在方法的重寫和重載,重載式多態,也叫編譯時多態,重寫式多態,也叫運行時多態狗的叫聲是:汪汪汪,而貓的叫聲是:喵喵喵。這就體現了不同動物shout方法的多態
2.對象類型轉換
**抽象類和接口可以當做向上轉型的引用變量類型
(1)向上轉型
1*概念
通過類型轉換把子對象轉為父類型
如 Animal dog=new Dog();
2*註意
轉型後只能調用子類父類共同具備的屬性和方法,且屬性和方法的值還是子類的。
如有一只狗叫大黃(DaHuang)他學會了一個本領fly(),並且他還會用兩條腿跑把它進行向上轉型 Dog daHuang=new daHuang();現他不能fly因為父類dog中沒有fly方法,但他依舊叫大黃,並且可以兩條腿走,這些屬性dog類都具備所以都保留了下來。
3*Object類
Object是所有類的父類,他有一個toString()方法,所有對象可直接調用,他用與輸出
對象的基本信息,如對象所屬類的類名、和對象的地址信息,也可以對toString()
方法重寫,用於放回一些特有信息
4*意義
減少代碼重復
*******************************有例子***********************************************
(2)向下轉型
通過類型轉換把父對象轉為子類型
1*註意事項
向下轉型的前提是父類對象指向的是子類對象(也就是說,在向下轉型之前,它得先向上轉型)
向下轉型只能轉型為本類對象(貓是不能變成狗的)
2*意義
向上轉型類似於一種模糊化處理,向下轉型則是對模糊化的去除,找回向上轉型丟失的方法
四.接口
1.抽象類
(1)定義
定義一個類時通常需要定義一些方法來描述該累的行為特征,有些時候,這些方法的方式是無法確定的So就誕生了用abstract修飾的抽象類
(2)特點
允許在定義方法時不寫方法體,不包含方法體的方法為抽象方法,抽象類中可以有普通的方法也可以同時都包含,也可以不包含抽象方法,抽象類不能創建對象。
2.接口
(1)定義
如果一個抽象類中所有方法都是抽象的我們可以用關鍵字interface修飾(而不是class)使其變為一個接口
(2)特點
1*方法全部為抽象方法,所有方法默認用public abstract來修飾,成員變量全部默認用public static final修飾一般不在接口中定義變量
2*由於接口中全部為抽象方法所有接口不能創建實例化對象,需要重新定義一個類並用implements關鍵字來實現接口中的所有方法。
3*接口可以通過extends去繼承另一個接口
4*若一個抽象類實現某個接口只要實現接口中的部分方法就行,普通類需全部實現
5*一個類可以implements多個接口,但只能extends一個類
6*一個類可同時實現繼承和實現接口但extends必須在implements前面
(3)抽象類和接口的理解
1*接口是對行為的抽象
2*抽象類生來就是被繼承的
3*java中類是現實生活中具體事物的映射,所以抽象類是對一種事物的抽象,包括屬性和方法,即對類抽象而接口卻是對類局部進行的抽象即對行為的抽象,在java中繼承是一個 "是不是"的關系,而 接口 的實現則是 "有沒有"的關系。如果一個類繼承了某個抽象類,則子類必定是抽象類的種類,而接口實現則是有沒有、具備不具備的關系
4*抽象類作為很多子類的父類,可以把它認為是一種模板。而接口可以認為是一種行為規範
5*對於抽象類,如果需要添加新的方法,可以直接在抽象類中添加具體的實現,子類可以不進行變更;而對於接口則不行,如果接口進行了變更,則所有實現這個接口的類都必須進行相應的改動。
3.匿名內部類
未完待續
五.異常
六.包的定義與使用
Java面向對象(下)