多重繼承
有時候我們會希望子類別可以繼承兩個以上的父類別,以便使用每一個父類別的功能,但JAVA並不允許多個父類別繼承。理由很簡單,因為JAVA的設計是以簡潔為導向,而利用類別的多重繼承將使得問題複雜化。但藉由介面的機制,多重繼承的處理還是可以實現,就是透過類別來實作兩個以上的介面!類別裡的函數只要明確定義每一個介面裡的函數,便可達到多重繼承的目的。
class 類別名稱 implements 介面1,介面2,...{
...
}
interface Shape{ //定義Shape介面
final double PI = 3.14;
}
interface Color{
abstract void setColor(String str); //定義Color介面
}
class Circle implements Shape,Color{ //實作Shape與Color介面
double radius;
String color;
public Circle(double r){
radius = r;
}
public void setColor(String str){ //定義Color介面裡的setColor()
color = str;
System.out.println("color= "+color);
}
public void area(){ //定義Shape介面裡的area()函數
System.out.println("area= "+PI*radius*radius);
}
public class Test{
public static void main(String args[]){
Circle cir;
cir = new Circle(2.0);
cir.setColor("Blue");
cir.area();
}
}
介面的延伸
介面與一般的類別一樣,可透過繼承的技術來衍生出新的介面。原來的介面稱為基底介面(base interface)或父介面(super interface),衍生出的介面稱為衍生介面(derived interface)或子介面(sub interface)。透過這種機制,衍生介面不僅可以保有父介面的成員,同時也可以加入新的成員以因應實際的問題所需。介面的繼承也是透過關鍵字extends。
interface 子介面名稱 extends 父介面名稱1,父介面名稱2,...{
...
}
類別關係的判別-instanceof
instanceof運算子是用來測試物件是否與某個類別(class)或是介面(interface)有繼承關係,回傳值為布林值。
object instanceof ClassName
傳回值為true,表示物件object是ClassName的類別或其子類別之物件;傳回值為false,表示物件object與該類別及其子類別無關連。
在使用instanceof運算子時,物件與類別間要有繼承的關係,否則編譯時會有「inconvertible types」的錯誤訊息。
耶!!!進入倒數啦啦啦啦啦啦~~
本來早上就要打文,結果網站掛掉...
See U tomorrow~
菜鳥工程師也有分享食記,歡迎大家追蹤喔~~
https://instagram.com/engineer_bodyfat?utm_medium=copy_link