java學習筆記(七)--(抽象類與介面下)(介面的定義與使用)
阿新 • • 發佈:2018-12-17
介面的定義與使用
-
介面優先原則:在一個操作即可以使用抽象類又可以使用介面的時候,優先考慮使用介面。
-
介面的定義(JDK8以前):介面就是抽象方法與全域性常量的集合(純粹版的抽象類),interfance關鍵字定義介面
interface IMessage{
//全域性常量
public static final String MSG ="I am a biter";
//抽象方法
public abstract void print();
}
介面命名:介面使用 I 開頭
子類要想使用介面,implements實現介面,一個子類可以同時實現多個父介面(避免單繼承侷限,實現多繼承)
父介面的相互轉換,前提兩個父介面擁有必須共同實現子類
interface IMessage{ //全域性常量 public static final String MSG ="I am a biter"; //抽象方法 public abstract void print(); } interface INews{ public abstract String getNews(); } class MessageImpl implements IMessage,INews{ public void print(){ System.out.println(IMessage.MSG); } public String getNews(){ return IMessage.MSG; } } public class Test{ public static void main(String[] args){ //子類向上轉型,為父介面例項化物件 IMessage m=new MessageImpl(); //呼叫被子類覆寫的方法 m.print(); //父介面相互轉換 INews n=(INews) m; System.out.println(n.getNews()); } }
父介面相互轉化示意圖:
子類的命名規範:介面名為 IMyInterfance,子類實現此介面命名為:MyInterfaceImpl
介面的使用限制:
-
介面中只允許public許可權(不顧是常量還是方法,都是public許可權,即便不寫許可權修飾符也是public),在其餘方法中預設為default許可權。
interface IMessage{ abstract void print(); } class MessageImpl implements IMessage{ //該方法預設為default許可權,無法覆寫父類 void print(){ System.out.println("Hello"); } } public class Test{ public static void main(String[] args){ IMessage m=new MessageImpl(); } }
阿里編碼規約:介面中不要出現任何修飾符,public也不要加
-
當子類既需要實現介面又需要繼承抽象類時,請先使用extends整合一個抽象類,而後使用implements實現多個介面
-
一個抽象類可以使用implements實現多個介面,介面不能繼承抽象類
-
介面可以使用extends繼承多個父介面(介面多繼承)
抽象類的應用:子類和基類為 is a 的關係
介面的應用場合
-
定義操作標準(USB標準,停車場標準)
-
表示能力
-
(瞭解)分散式開發中暴露遠端方法
interface Car{
public void inter();
public void count();
public void charge();
}
class truck implements Car{
public void inter(){
System.out.println("進入一個卡車!");
}
public void count(){
System.out.println("開始計時!");
}
public void charge(){
System.out.println("收費!");
}
}
class Taxi implements Car{
public void inter(){
System.out.println("進入一個計程車!");
}
public void count(){
System.out.println("開始計時!");
}
public void charge(){
System.out.println("收費!");
}
}
public class Test{
public void Parking(Car car){
car.inter();
car.count();
car.charge();
}
public static void main(String[] args){
Test clint=new Test();
clint.Parking(new truck());
clint.Parking(new Taxi());;
}
}