您的位置:首页 > 编程语言 > Java开发

java中接口interface用法小结

2015-11-07 05:38 411 查看
From http://blog.sina.com.cn/s/blog_48c0812c0101alaz.html
相对abstract class(抽象类)来讲,interface则造出了“完全抽象的class”,丝毫不带半点实现的内容。且interface中的所有methods都是空的,当然,编译器也强迫你这样做。在接口使用时需注意以下几点:

1.接口一般定义的是常量和一些抽象方法。

2.接口的引用指向实现的对象,尽量定义为接口或父类的引用;

3.接口只能定义抽象方法而且默认为是Public,常量用public static final 修饰;

4.通过implements来引用接口;

5.多个无关类可以实现一个接口,但接口的引用必须指向实现的对象;

6.一个类可以实现多个无关的接口(这点和继承要有所区别);

7.和继承一样,接口与实现类之间存在多态性;

8.接口可以继承其他的接口,并添加新的属性和抽象方法;

9.在类中实现接口的方法时必须加上public修饰符。

接口的使用大致可归结为以下三类:

1.多态接口动态加载

例如编写一个通用程序,用来计算每一种交通工具运行1000公里所需的时间,已知每种交通工具的参数都是3个整数A、B、C的表达式。现有两种工具:Car 和Plane,其中Car的速度运算公式为:A*B/C,Plane的速度运算公式为:A+B+C。需要编写三类:ComputeTime.java,Plane.java,Car007.java和接口Common.java,要求在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序。其运行过程如下,从命令行输入ComputeTime的四个参数,第一个是交通工具的类型,第二、三、四个参数分别时整数A、B、C,举例如下:

计算Plane的时间:"java ComputeTime Plane 20 30 40"

计算Car007的时间:"java ComputeTime Car007 23 34 45"

如果第3种交通工具为Ship,则只需要编写Ship.java,运行时输入:"java ComputeTime Ship 22 33 44"

注意:实例化一个对象的另外一种办法:Class.forName(str).newInstance();例如需要实例化一个Plane对象的话,则只要调用Class.forName("Plane").newInstance()便可。

代码如下:

import CalTime.vehicle.all.Common;

import java.lang.*;

public class ComputeTime {

public static void main(String args[]) {

System.out.println("交通工具: "+args[0]);

System.out.println(" 参数A: "+args[1]);

System.out.println(" 参数B: "+args[2]);

System.out.println(" 参数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("运行时间:"+t+" 小时");

} catch(Exception e) {

System.out.println("class not found");

}

}

}

2.Plane.java

package CalTime.vehicle;

import CalTime.vehicle.all.Common;

public class Plane implements Common {

public double runTimer(double a, double b, double c) {

return (a+ b + c);

}

}

3. Car.java

package CalTime.vehicle;

import CalTime.vehicle.all.Common;

public class Car implements Common {

public double runTimer(double a, double b, double c) {

return ( a*b/c );

}

}

4.Common.java

package CalTime.vehicle.all;

public interface Common {

double runTimer(double a, double b, double c);

}



一次运行结果:

C:\java>java ComputeTime Car 100 45 67

交通工具: Car

参数A: 100

参数B: 45

参数C: 67

平均速度: 67.16417910447761 km/h

运行时间:14.88888888888889 小时

C:\java>java ComputeTime Plane 130 45 67

交通工具: Plane

参数A: 130

参数B: 45

参数C: 67

平均速度: 242.0 km/h

运行时间:4.132231404958677 小时



2.接口作为方法的参数传递

先看一个接口应用的例子:

interface Extendbroadable{

public void inPut();

}

class KeyBroad implements Extendbroadable{

public void inPut(){

System.out.println("\n hi,keybroad has be input into then mainbroad!\n");

}

}

class NetCardBroad implements Extendbroadable{

public void inPut(){

System.out.println("\n hi,netCardBroad has be input into then mainbroad!\n");

}

}

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);

}

}

以上可以看出可以将接口类型的参数作为方法参数,在实际使用时可以将实现了接口的类传递给方法,然后方法会按照重写的原则执行,实际调用的是实现类中的方法代码体,这样便根据传进去的参数的不同而实现不同的功能。

3.产生常量群

由于interface中的数据成员会自动成为public static final,所以我们可以利用此性质把需要的常量归结到一个接口中,如下:

public interface Months{

int JANURAUY = 1;

int FEBRUARY = 2;

int MARCH =3;

}

然后要用的话,就直接Months. JANURAUY*10类似的直接用就行了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: