1. 程式人生 > >接口--多態

接口--多態

自動轉換 extends 子類 implement imp final 需要 bstr 同時

1.寫出定義接口的格式
interface A{
public abstract void work();
}
註:
(1)接口的權限修飾符如果不標明,默認為default,僅可在本包中訪問;
(2)接口中的方法必須為抽象方法,且public abstract可以不寫,默認為public abstract.實際開發中通常寫為 public void work();
(3)接口的子類叫做實現類,命名方式一般為:接口名+Impl,如InterfaceImpl;
(4)java8中有新特性,可實現類方法(static修飾,可由接口名直接調用)和默認方法(default修飾,由實現類的實例化對象調用);


2.寫出實現接口的格式
實現接口的類稱為實現類,格式如下:
//定義接口
interface A{
public void work();
}
//定義實現類
class B implements A{
public void work(){
System.out.println("實現類");
}
}

3.說出接口中成員的特點
接口由全局常量和抽象方法構成.全局常量由public static final修飾.如:
interface A{
public static final String str = "abc";
public void work();
}


4.接口和抽象類的區別
區別:
1)是否提供實現方法:抽象類為部分方法提供實現,避免子類重復實現這些方法,提高代碼復用性;接口只能包含抽象方法(java7及以前);
2)繼承與實現:接口可以同時繼承多個接口;一個類只能繼承一個直接父類(可以為抽象類),卻可以實現多個接口(彌補了單繼承的局限);
3)共性與擴展:抽象類為繼承體系中的共性內容,接口為繼承體系中的擴展功能.

相同:
1)頂端:都位於繼承的頂端,用於被其他類實現或繼承;
2)實例化對象:都不能直接實例化對象;
3)抽象方法:都可以包含抽象方法,其子類必須覆寫這些抽象方法

選用:
1)優先用接口,少用抽象類
2)需要定義子類的行為,又要為子類提供共性功能時才選用抽象類


5.能夠說出使用多態的前提條件
有繼承(extends)關系或實現(implements)關系


6.理解多態的轉型
舉例:父類Person 子類Student
Person p = new Student(); //向上轉型(自動轉換),轉換完成後p可訪問父類的成員變量,調用子類覆寫的成員方法,但不能調用子類特有的成員方法

Student stu = (Student) p; //向下轉型,stu可訪問子類中的成員變量,可調用父類方法(繼承)和子類中的所有方法

7.理解多態
java引用變量有兩個類型:一是編譯時類型,一是運行時類型。編譯時類型由聲明該變量時使用的類型決定;運行時類型由實際引用的對象決定。如果編譯時類型與運行時類型不一致,就可能出現多態(Polymorphism)。方法的重載/覆寫,實例化對象的轉型等都屬於多態的範疇。

接口--多態