介面與多型的總結
一.介面
1.介面的特點
1.介面更像是一個完全形態的抽象類(抽象類允許存在非抽象的方法,但是在介面中不允許存在)
2.介面需要一個實現類,其格式為public 類名 implements 介面名() 在實現類中應該重寫全部介面中的方法。
3.在介面中定義的成員變數全是常量(無法改變)格式為:public static final 資料型別 變數名
static是為了可以再類中直接引用該變數(介面名.變數名)
2.介面的多實現
1.介面的多實現是介面的最重要的作用,因為類我們是無法多繼承的(因為當我們在呼叫所繼承的類中方法時,如果存在相同方法,就會產生安全隱患)介面中的方法全是抽象方法,即時同名,我們也可以在重寫方法時寫入我麼的要求。
2.格式 public 類名 implements 介面名,介面名(){}
3.介面的多實現同時還可以進行類的繼承 格式:public 類名 extends 類名 implements 介面名 ,介面名(){}
3.介面的多繼承
1.所謂的無法多繼承只發生在類中,在介面中是完全允許多繼承的,其概念及過程與類的單繼承是完全一樣的。
2.格式:public 介面名 extends 介面名 ,介面名(){}
4.介面思想
介面的思想其實更像是一個標籤,就像是一個人,本來每個人都一樣,有著共同的特點,但是當我們給他的身上貼上抓賊的標籤之後他就成為了一個民警。這便是這個人與其他人不一樣的地方。
5.介面與抽象類的區別
介面與抽象類真的很像啊。。。。但是他們之間也確實是有區別的
介面中規定每一個方法都必須是抽象方法,然而抽象類中卻允許非抽象方法的存在,從這個方面說一下我的看法吧
我們都說介面的出現是為了解決類的繼承之中會出現的耦合性過高的問題,也就是為了解耦合,但是耦合性從何而來?
在類的繼承中我們不是每一個方法都是抽象方法的,而那些不用我們重寫的方法在我看來就是耦合性高的原因,因為那些方法不用重寫,所以他們在不斷地單繼承過程中類和類之間會產生很多的相同方法,但是有一些相同的方法又並不是我們所需要的
那為什麼不去重寫這些相同的方法?
當我們的父類資訊量很大時,找出那些我們不需要的方法再去重寫它,感覺挺難的。
介面就不一樣了,他其實相當於一個額外的東西,就相當於我們的特殊點吧.........而且當我們需要共同點時也可以使用介面的繼承,反正我們重寫方法的時候是按需要寫的。
我們大多是時候應該是考慮使用介面,或者抽象類與介面同時使用比較好
二.多型
1.什麼是多型?
1.多型更像是封裝,抽象,介面的結合體,具有他們的幾乎所有特點
2.多型更像是對於一個是事物做出的共同卻又有些不同的應答(好抽象):兩個人共同點都是去吃飯,一個人想吃快餐,多型會給你漢堡;一個人想吃中餐,多型會給你烤串。大概就是這個意思了。。。。。共同點是吃飯,但卻又確實存在不同點,很靈活是吧。
2.多型的形成條件
1.一定要在子類與父類存在繼承關係,或者介面的實現關係的情況下
2.子類要重寫方法
3.父類引用子類物件或者介面引用實現類物件
一些不能形成的情況:
1.static修飾的方法這種方法屬於類的方法,也就是說這種靜態的方法,是在一個類被創造之初便進入靜態儲存區的,他是不用例項化的,直接類名.方法名就可以直接引用了。況且以private,static修飾的方法是無法參與繼承的,所以根本無法重寫。
2.final修飾的方法無法被更改,就像常量一樣,也不行。
3.protect修飾的也不行只能在本包內被呼叫意義不大。
3. 多型的分類(還沒有學的這麼深,就先把其他大神的寫一下,學到了就研究)
1、編譯時多型,即方法的過載,從JVM的角度來講,這是一種靜態分派(static dispatch)
2、執行時多型,即方法的重寫,從JVM的角度來講,這是一種動態分派(dynamic dispatch) //轉自五月的倉頡
4.多型的定義(升高與降級)
1.對於多型的升高(基本形式):在網課上看的,挺有趣的解釋:這就像是化妝,女生想要整容成某個明星,這就是一種升高,這種升高是有侷限性的,其侷限於相同性,因為你要和那個明星整的一樣嘛。。整完事了,你若想要完全像哪個明星,就要不斷地模仿,在模仿,使你們之間的區別不斷減少,然後你就成了他了。這就是升高,缺點就是不太靈活。
具體體現在:
當我們形成多型後,我們在測試類中呼叫變數時計算機是以父類中的該變數為準的,若是我們在測試類中呼叫了一個父類中沒有而子類中存在的變數時,會報錯;同時當我們在呼叫方法時同樣是以父類中為準,同時以子類中重寫的方法為方法體呼叫的。
格式:父類(介面) 物件1=new 子類(實現類)();
2.對於多型的降級:就是還原,類比上面的,在做回自己這個個體,而不用去刻意的模仿別人了。這就允許了一定的共同點,比如說都是女生;不同點,個頭不一樣等等
具體是:這其實就像是我們正常的例項化物件了,但是因為我們已經升高過了,所以他和正常例項化的格式不一樣,需要強制轉換一下
格式:子類 (實現類) 物件2=(子類或實現類) 物件一;
5.instanceof關鍵字
用於判斷是否是該類的物件
格式 a instanceof 類名; 多用於if語句,因為其返回值是boolean型別的
三.總結
面向物件的三個特點終於總結完了......開始異常類了。還是學的太快了,像是在趕進度(確實是...),記得詳細一些,以後也好複習吧。