介面中的方法全都是抽象方法,用來指定一些規則,讓子類去重寫。介面的作用主要體現在一下兩點
1.指定規則
2.利用這些規則給類做功能擴充套件
介面使用inte***ce關鍵字來定義,使用implements來實現。
//定義介面
public
inte***ce
inter
//實現介面
public
class
interimpl
implements
inter
}
1.介面中的成員變數,預設被 public
static
final 修飾
2.介面中的方法,預設被 public
abstract 修飾
3.介面中不能寫構造方法
jdk7以後對介面做了一些更新
jdk7: 介面中的方法全都是抽象方法,子類必須重寫
jdk8: 允許在介面中寫預設方法(被 public
default 修飾的方法),可選重寫
如果多個介面中有相同的預設方法,子類必須重寫
允許在介面中寫靜態方法(被 public
static 修飾),使用介面名調,可選重寫
jdk9: 允許在介面中寫私有方法 (被 private 修飾),只能在本介面中使用
介面中的方法可用的許可權修飾符只有 public , private 兩種,不寫會預設用 public , 雖然也有可能出現 default ,但其並不作為許可權修飾符使用,只是一種固定寫法
介面中的成員方法只能用 public 修飾,不寫會預設用 public
1.類與類的關係:只能單繼承
2.類與介面的關係:多實現關係
3.介面與介面關係:多繼承關係
子類在繼承父類的同時也可以實現介面
同乙個物件可以用多種資料型別(父類、介面)進行接收。
多型的前提
1.要有繼承、實現的關係
2.要有方法重寫
3.父類/介面接收子類物件
animal a=
newdog()
;//animal是dog的父類
usb u=
newmouse()
;//usb是mouse的介面
1.成員變數的訪問特點
編譯看左邊(父類),執行也看左邊(父類)
大白話:父類有就用父類的,父類沒有就報錯了
呼叫時需注意
public
class
test
}2.成員本方法的訪問特點
編譯看左邊(父類),執行看右邊(子類)
大白話:子類複寫父類方法,就執行子類的方法。
1.好處:提高了**的擴充套件性
把方法的引數寫成父類、介面,呼叫方法時可以傳遞任意的子類物件。
2.弊端:不能呼叫子類特有的方法 需要向下轉型後方可呼叫
1.向上轉型
animal a=
newdog()
;//多型的寫法,就是向上轉型
2.向下轉型
//判斷變數a具體是什麼型別
if(a instanceof
dog)
注意:多型的轉型並不是隨意的,它是乙個還原的動作。原本是什麼型別,才能轉換為什麼型別。
3.多型轉型可能會遇到的問題
classcastexception: 多型的轉型出現的問題,型別轉換錯了
java筆記四 介面與多型
public inte ce swimmer介面中的方法沒有操作時,必須得公開且抽象,為了方便可以省略public abstract public inte ce swimmer物件若想擁有swimmer定義的行為,就必須操作介面 eg fish擁有swimmer行為 package openhom...
PHP物件導向05 介面與多型
抽象類與介面 2014 9 2 9 14 32 摘要 1 抽象類 abstract 2 介面 inte ce 3 多型的應用 1 抽象類 abstract 特點 1 抽象類使用abstract關鍵字申明 2 抽象類中可以沒有抽象方法 3 任何乙個類,如果它裡面至少有乙個抽象方法,那麼這個類就必須被宣...
PHP物件導向05 介面與多型
抽象類與介面 2014 9 2 9 14 32 摘要 1 抽象類 abstract 2 介面 inte ce 3 多型的應用 1 抽象類 abstract 特點 1 抽象類使用abstract關鍵字申明 2 抽象類中可以沒有抽象方法 3 任何乙個類,如果它裡面至少有乙個抽象方法,那麼這個類就必須被宣...