接口

接口是一种引用数据类型,用interface声明 语法:

public interface  name{
}

接口的特性

(1)接口中可以声明属性和方法(实际应用比较少,不多说)

         属性都是final和static类型的;

         方法都是公共的抽象方法

(2)接口不能有构造方法,不能用于创造对象

(3)接口可以多继承,一个借口可以继承多个其他接口

     

(4)一个类可以实现一个或多个接口的所有抽象方法,那么这个类也可以称为接口的实现类

         一个类继承一个父类,实现多个接口,继承在前,接口在后(特殊情况:如果这个父类里面定义了和接口里一样的抽象方法,那么最后实现的是父类里的抽象方法)

接口的应用

(1)接口表示一种能力,接口让实现类实现这些能力,同时实现类自己也得到拓展

package cn.sxt.interface03;
// 驾驶接口
public interface DriveInterface {
// 驾驶的方法 public void drive(); }
package cn.sxt.interface03;
//学生实现了上面接口的抽象方法(驾驶)
public class Student implements DriveInterface{
    ////
    public void learn(String cName) {
        System.out.println(this.name+"正在学习"+cName);
    }
    @Override
    public void drive() {
        System.out.println(this.name+"正在驾驶...");
    }

}
package cn.sxt.interface03;
//教师实现了接口的抽象方法(驾驶)
public class Teacher implements DriveInterface{
    /// …
    @Override
    public void drive() {
        System.out.println(this.name+"正在学习驾驶技术...");
        System.out.println(this.name+"很快学会了飙车...");
    }
    
}

(2)接口实现多态(从下面这段代码的形式来看就和面向对象的多态很像)

public class Test01 {
    public static void main(String[] args) {
        
        // 同一引用类型
        USBInterface usbInterface = null;
        
        // 实例不同
        usbInterface = new USBFan();
        // 对同一方法的执行结果不同
        usbInterface.connect();

        usbInterface = new USBMouse();
        usbInterface.connect();
        
        usbInterface = new USBDisk();
        usbInterface.connect();
    }
}

区别:

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

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

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

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

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

(3)面向接口编程

通俗理解面向接口编程:接口的定义方只关心接口能不能被实现,不关心怎样实现的。

理解:

=>实现类必须实现接口中所有的方法,所以接口规范了实现类的行为

=> 接口约定了实现类应该具备的行为

//给打印机设置接口
public
class Writer { // 预留墨盒接口 private InkBoxInterface inkBoxInterface; // 预留纸张接口 private PaperInterface paperInterface; public InkBoxInterface getInkBoxInterface() { return inkBoxInterface; } public void setInkBoxInterface(InkBoxInterface inkBoxInterface) { this.inkBoxInterface = inkBoxInterface; } public PaperInterface getPaperInterface() { return paperInterface; } public void setPaperInterface(PaperInterface paperInterface) { this.paperInterface = paperInterface; } public Writer(InkBoxInterface inkBoxInterface, PaperInterface paperInterface) { super(); this.inkBoxInterface = inkBoxInterface; this.paperInterface = paperInterface; } public Writer() { super(); } public void print(String content) { System.out.println("打印机正在使用"+this.inkBoxInterface.getColor()+"颜色打印"+this.paperInterface.getSize()+"打印"+content); } }

抽象类和接口的异同:

  • 抽象类和接口都是引用数据类型,他们都不能创建对象。
  • 他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的都是抽象方法。
  • 抽象类和接口都具有传递性。抽象类是单根性(单继承),而接口是多继承。
  • 在概念上,都可以重写抽象方法。子类重写抽象类,实现类实现接口

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

原文地址:https://www.cnblogs.com/zhangxiong-tianxiadiyi/p/10770760.html