Java基础--接口

1.接口的定义

接口是一种引用数据类型。使用interface声明接口,声明方式:public interface 接口名称{ }

2.接口的特性

[1] 接口中可以声明属性,接口中定义的所有变量都是static final类型的;

[2]接口中的方法都是公共抽象方法;

[3]接口不能拥有构造方法,不能用于创建对象;

[4]接口可以多继承。一个接口可以继承多个其他接口;

[5]一个类可以实现一个或者多个接口,该类称为接口的实现类(implement class),实现类必须实现接口中的所有(抽象)方法;

3.接口的应用

[1] 接口表示一种能力

下面代码中:实现类Student具备了驾驶能力,实现类Teacher也具备了驾驶能力,原因是都实现了DriveInterface,两个实现类的能力得到了增强。

 1 package cn.sxt.interface03;
 2 
 3 /**
 4  * 驾驶接口
 5  */
 6 public interface DriveInterface {
 7     /**
 8      * 驾驶的方法
 9      */
10     public void drive();
11 }
 1 package cn.sxt.interface03;
 2 
 3 public class Student implements DriveInterface{
 4     ////
 5     public void learn(String cName) {
 6         System.out.println(this.name+"正在学习"+cName);
 7     }
 8 
 9     @Override
10     public void drive() {
11         System.out.println(this.name+"正在驾驶...");
12     }
13 
14 }
 1 package cn.sxt.interface03;
 2 
 3 public class Teacher implements DriveInterface{
 4     /// …
 5 
 6     @Override
 7     public void drive() {
 8         System.out.println(this.name+"正在学习驾驶技术...");
 9         System.out.println(this.name+"很快学会了飙车...");
10     }
11     
12 }

[2]接口实现多态与父子类实现多态的对比

接口实现多态: 接口类型 引用 实现类对象

继承实现多态: 父类类型 引用 子类对象

接口定义的方法被实现类实现,通过接口引用实现类时,调用接口中的方法时,执行的是实现类实现的方法。

实现类对象具备接口中定义的能力 是一种has a 关系

子类对象是一种父类类型 是一种is a 关系

 1 package cn.sxt.interface4;
 2 
 3 public class Test01 {
 4     public static void main(String[] args) {
 5         
 6         // 同一引用类型
 7         USBInterface usbInterface = null;
 8         
 9         // 实例不同
10         usbInterface = new USBFan();
11         // 对同一方法的执行结果不同
12         usbInterface.connect();
13 
14         usbInterface = new USBMouse();
15         usbInterface.connect();
16         
17         usbInterface = new USBDisk();
18         usbInterface.connect();
19     }
20 }

[3]面向接口编程

所谓面向接口编程,在程序设计时,只关心实现类具备什么能力,而不关心实现类如何实现这个能力。面向接口编程时,面向接口的约定而不考虑接口的具体实现。

面向接口编程时,接口的定义方只关系实现类是否具备接口所定义的能力,而实现类如何被的该能力接口定义方一点都不关心。

 1 package cn.sxt.interface06;
 2 
 3 public class Writer {
 4 
 5     // 预留墨盒接口
 6     private InkBoxInterface inkBoxInterface;
 7 
 8     // 预留纸张接口
 9     private PaperInterface paperInterface;
10 
11     public InkBoxInterface getInkBoxInterface() {
12         return inkBoxInterface;
13     }
14 
15     public void setInkBoxInterface(InkBoxInterface inkBoxInterface) {
16         this.inkBoxInterface = inkBoxInterface;
17     }
18 
19     public PaperInterface getPaperInterface() {
20         return paperInterface;
21     }
22 
23     public void setPaperInterface(PaperInterface paperInterface) {
24         this.paperInterface = paperInterface;
25     }
26 
27     public Writer(InkBoxInterface inkBoxInterface, PaperInterface paperInterface) {
28         super();
29         this.inkBoxInterface = inkBoxInterface;
30         this.paperInterface = paperInterface;
31     }
32 
33     public Writer() {
34         super();
35     }
36 
37     public void print(String content) {
38         System.out.println("打印机正在使用"+this.inkBoxInterface.getColor()+"颜色打印"+this.paperInterface.getSize()+"打印"+content);
39     }
40 }

4.抽象类和接口的异同比较

•    抽象类和接口都是引用数据类型,他们都不能创建对象。

•    他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的都是抽象方法。

•    抽象类和接口都具有传递性。抽象类是单根性(单继承),而接口是多继承。

•    在概念上,都可以重写抽象方法。子类重写抽象类,实现类实现接口

•    抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题 => 高内聚,低耦合。接口可以用解耦模块。

 

posted @ 2019-04-25 21:53  WhisperHong  阅读(256)  评论(0编辑  收藏  举报