接口引用指向實現類的對象
//定義接口InterfaceA interface InterfaceA { void fun(); } //實現接口InterfaceA的類Bimpl class Bimpl implements InterfaceA { public void fun() { System.out.println(“This is B”); } } //實現接口InterfaceA的類Cimpl class Cimpl implements InterfaceA { public void fun() { System.out.println(“This is C”); } } class Test { public static void main(String[] args) { InterfaceA a; a= new Bimpl(); a.fun(); a = new Cimpl(); a.fun(); } } //輸出結果為: // This is B // This is C
為什么要用接口引用指向實現類的對象?
這種寫法其實Java多態的表現形式(一個接口類型的引用變量來引用實現接口的類的實例,當這個引用調用方法時,它會根據實際引用的類的實例來判斷具體調用哪個方法)
多態的定義:指允許不同類的對象對同一消息做出響應。即同一消息可以根據發送對象的不同而采用多種不同的行為方式。(發送消息就是函數調用)
為什么一般都使用 接口引用指向子類對象 ,而不用 實現類本身 引用呢?
問題就在於接口可以有多個實現類,如果現在你使用這個實現類接收,也許哪一天你需要換成其它的實現類呢?
這時你只要將new的實現類對象換成你想要的就行了, 其它地方的代碼根本不需要改動。
注意事項
沒有在接口定義的方法(實現類增加的方法)是不可以被訪問到的
在接口的實現類中該實現方法的類型和參數必須與接口中所定義的精確匹配。
