詳細(xì)介紹Java接口的作用
接口的概念其實(shí)并不難理解, 接口關(guān)鍵字Interface, 在使用時(shí)可以只定義函數(shù)體而不需求詳細(xì)的實(shí)現(xiàn)。 再類的繼承過(guò)程中可以實(shí)現(xiàn)多個(gè)接口而取代了類的多繼承。 使用接口其實(shí)就有點(diǎn)像實(shí)現(xiàn)虛函數(shù)的調(diào)用一樣, 用繼承接口的子類實(shí)例化聲名得借口就可以經(jīng)過(guò)接口調(diào)用子類外部接口定義的函數(shù)。
使用這種接口方式編程, 如果業(yè)務(wù)邏輯發(fā)生變化需求新增類多辦法, 就可以再不改動(dòng)原來(lái)已經(jīng)寫好的代碼基礎(chǔ)上新增一個(gè)類來(lái)實(shí)現(xiàn)接口中定義的函數(shù)來(lái)實(shí)現(xiàn)。 詳細(xì)辦法請(qǐng)看下面兩個(gè)例子:
1、JAVA多態(tài)接口動(dòng)態(tài)加載實(shí)例
用來(lái)計(jì)算每一種交通工具運(yùn)轉(zhuǎn)1000公里所需的工夫, 已知每種交通工具的參數(shù)都是3個(gè)整數(shù)A、B、C的表達(dá)式。 現(xiàn)有兩種工具:
Car 和Plane, 其中Car 的速度運(yùn)算公式為:A*B/C
Plane 的速度運(yùn)算公式為:A+B+C。
需求編寫三類:ComputeTime. java, Plane. java, Car007. java和接口Common. java, 要求在未來(lái)如果添加第3種交通工具的時(shí)候, 不必修正以前的任何程序, 只需求編寫新的交通工具的程序。 其運(yùn)轉(zhuǎn)過(guò)程如下, 從命令行輸入ComputeTime的四個(gè)參數(shù), 第一個(gè)是交通工具的類型, 第二、三、四個(gè)參數(shù)分別時(shí)整數(shù)A、B、C, 舉例如下:
計(jì)算Plane的工夫:"java ComputeTime Plane 20 30 40"
計(jì)算Car007的工夫:"java ComputeTime Car007 23 34 45"
如果第3種交通工具為Ship, 則只需求編寫Ship. java, 運(yùn)轉(zhuǎn)時(shí)輸入:"java ComputeTime Ship 22 33 44"
提示:充沛應(yīng)用接口的概念, 接口對(duì)象充當(dāng)參數(shù)。
實(shí)例化一個(gè)對(duì)象的另外一種辦法:Class. forName(str). newInstance();例如需務(wù)實(shí)例化一個(gè)Plane對(duì)象的話, 則只要調(diào)用Class. forName("Plane"). newInstance()便可。
Java代碼
- import CalTime. vehicle. all. Common;
- import java. lang. *;
- public interface Common . . . {
- double runTimer(double a, double b, double c);
- }
- public class Plane implements Common . . . {
- public double runTimer(double a, double b, double c) . . . {
- return (a+ b + c);
- }
- }
- public class Car implements Common . . . {
- public double runTimer(double a, double b, double c) . . . {
- return ( a*b/c );
- }
- }
- public class ComputeTime . . . {
- public static void main(String args[]) . . . {
- System. out. println("交通工具: "+args[0]);
- System. out. println(" 參數(shù)A: "+args[1]);
- System. out. println(" 參數(shù)B: "+args[2]);
- System. out. println(" 參數(shù)C: "+args[3]);
- double A=Double. parseDouble(args[1]);
- double B=Double. parseDouble(args[2]);
- double C=Double. parseDouble(args[3]);
- double v, t;
- try . . . {
- Common d=(Common) Class. forName("CalTime. vehicle. "+args[0]). newInstance();
- v=d. runTimer(A, B, C);
- t=1000/v;
- System. out. println("均勻速度: "+v+" km/h");
- System. out. println("運(yùn)轉(zhuǎn)工夫:"+t+" 小時(shí)");
- } catch(Exception e) . . . {
- System. out. println("class not found");
- }
- }
- }
以前看過(guò)一個(gè)求形狀的標(biāo)題就是有兩個(gè)圓形求交集現(xiàn)在定義了兩種狀況問(wèn)要是擴(kuò)展大別的狀況該當(dāng)怎樣設(shè)計(jì), 想了很久不得其解, 現(xiàn)在突然覺(jué)得接口通殺矣~
2、JAVA接口作為參數(shù)傳遞
可以將接口類型作為方法參數(shù), 在使用時(shí)可以將實(shí)現(xiàn)了接口的類傳遞給方法,實(shí)際調(diào)用的是實(shí)現(xiàn)類中的方法代碼體, 這樣便根據(jù)傳入的參數(shù)的不同而實(shí)現(xiàn)不同的功能。 重要的是, 當(dāng)我當(dāng)前需要另外一個(gè)對(duì)象并且擁有承受所聲明的方法的時(shí)候, 我們不必須原類, 只需新的類實(shí)現(xiàn)接口即可。
Java代碼
- import java. lang. *;
- interface Extendbroadable . . . {
- public void inPut();
- }
- class KeyBroad implements Extendbroadable . . . {
- public void inPut() . . . {
- System. out. println(" hi, keybroad has be input into then mainbroad! ");
- }
- }
- class NetCardBroad implements Extendbroadable . . . {
- public void inPut() . . . {
- System. out. println(" hi, netCardBroad has be input into then mainbroad! ");
- }
- }
- class CheckBroad . . . {
- public void getMainMessage(Extendbroadable ext). . . {
- ext. inPut();
- }
- }
- public class InterfaceTest01 . . . {
- public static void main(String []args) . . . {
- KeyBroad kb=new KeyBroad();
- NetCardBroad ncb=new NetCardBroad();
- CheckBroad cb=new CheckBroad();
- cb. getMainMessage(kb);
- cb. getMainMessage(ncb);
- }
- }
希望通過(guò)以上對(duì)于JAVA接口的介紹,能夠幫助到你。