接口使用

来源:互联网 发布:java wait join 编辑:程序博客网 时间:2024/06/05 13:22

一概念介绍

1接口可以用于声明引用类型的变量,但接口不能用于创建实例。

2当使用接口来声明引用类型变量时,这个引用类型变量必须引用其实现类的对象。

3一个类可以实现一个或多个接口,实现接口用implements关键字。

4一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里所定义的全部抽象方法,否则,该类将保留从父接口那里继承到的抽象方法,该类也必须定义为抽象类。

 

二实现接口的类应用

1代码示例

Output.java

public interface Output{// 接口里定义的成员变量只能是常量int MAX_CACHE_LINE = 50;// 接口里定义的普通方法只能是public的抽象方法void out();void getData(String msg);// 在接口中定义默认方法,需要使用default修饰default void print(String... msgs){for (String msg : msgs){System.out.println(msg);}}// 在接口中定义默认方法,需要使用default修饰default void test(){System.out.println("默认的test()方法");}// 在接口中定义类方法,需要使用static修饰static String staticTest(){return "接口里的类方法";}}

Printer.java

// 定义一个Product接口interface Product{int getProduceTime();}// 让Printer类实现Output和Product接口public class Printer implements Output , Product{private String[] printData= new String[MAX_CACHE_LINE];// 用以记录当前需打印的作业数private int dataNum = 0;public void out(){// 只要还有作业,继续打印while(dataNum > 0){System.out.println("打印机打印:" + printData[0]);// 把作业队列整体前移一位,并将剩下的作业数减1System.arraycopy(printData , 1, printData, 0, --dataNum);}}public void getData(String msg){if (dataNum >= MAX_CACHE_LINE){System.out.println("输出队列已满,添加失败");}else{// 把打印数据添加到队列里,已保存数据的数量加1。printData[dataNum++] = msg;}}public int getProduceTime(){return 45;}public static void main(String[] args){// 创建一个Printer对象,当成Output使用Output o = new Printer();o.getData("Linux");o.getData("Java");o.out();o.getData("软件设计");o.getData("信息安全");o.out();// 调用Output接口中定义的默认方法o.print("林冲" , "武松" , "宋江");o.test();// 创建一个Printer对象,当成Product使用Product p = new Printer();System.out.println(p.getProduceTime());// 所有接口类型的引用变量都可直接赋给Object类型的变量Object obj = p;}}

2运行结果

F:\java\workspace\java6\src>java Printer

打印机打印:Linux

打印机打印:Java

打印机打印:软件设计

打印机打印:信息安全

林冲

武松

宋江

默认的test()方法

 

45

3结果分析

Printer类实现了Output接口和Product接口,因此Printer对象既可直接赋给Output变量,也可直接赋给Product变量。仿佛Printer类既是Output类的子类,也是Product类的子类,这就是Java提供的模拟多继承。

Printer实现了Output接口,即可获取Output接口中定义的print()和test()两个默认方法,因此Printer实例可以直接调用这两个默认方法。

0 0
原创粉丝点击