• Java-接口(interface)


    1.1接口的定义

    java中接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

    接口是一种引用数据类型。使用interface声明,形式如下:

    public interface 接口名称{
    }

    1.2 接口的特性

    【1】接口中可以声明属性。接口定义的所有变量都是static final类型的。

    【2】接口中的方法都是公共抽象方法。

    【3】接口不能拥有构造方法,不能用于创建对象。

    【4】接口可以多继承,一个接口可以继承多个接口。

    public interface CInterface extends AInterface, BInterface {
    
    }

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

      一个类只能继承一个父类,同时实现多个接口。继承在前,实现在后。

     1 public class ImplClass3 extends AbsClass implements AInterface,BInterface{
     2 
     3     @Override
     4     public void showInfoA() {
     5         // TODO Auto-generated method stub
     6         
     7     }
     8 
     9     @Override
    10     public void showInfoB() {
    11         // TODO Auto-generated method stub
    12         
    13     }
    14 
    15     @Override
    16     public void showInfoC() {
    17         // TODO Auto-generated method stub
    18         
    19     }
    20 
    21 }

    特殊情况:

    如果一个抽象父类定义了和接口同名的抽象方法,实现类实现的是抽象父类的抽象方法。

     1 package cn.interface02;
     2 
     3 public class ImplClass4 extends AbsClass implements CInterface{
     4 
     5     @Override
     6     public void showInfoA() {
     7         // TODO Auto-generated method stub
     8         
     9     }
    10 
    11     @Override
    12     public void showInfoB() {
    13         // TODO Auto-generated method stub
    14         
    15     }
    16 
    17     @Override
    18     public void showInfoC() {
    19         // TODO Auto-generated method stub
    20         
    21     }
    22 
    23 }

     总结:

     实现类实现接口,必须实现接口中定义的抽象方法。

     =>方法即行为,表示一种能力。

     =>接口定义了一套功能,实现类必须实现这些功能。=>实现类的能力得到拓展。

    2 接口的应用

     2.1接口的应用

    【1】接口表示一种能力

      接口定义了一系列的方法表示一种种的能力。接口让实现类实现这些方法,实现类的能力得到拓展和升级。

     1 package cn.sxt.interface03;
     2 
     3 /**
     4  * 驾驶接口
     5  */
     6 public interface DriveInterface {
     7     /**
     8      * 驾驶的方法
     9      */
    10     public void drive();
    11 }
    12 
    13 package cn.sxt.interface03;
    14 
    15 public class Student implements DriveInterface{
    16     ////
    17     public void learn(String cName) {
    18         System.out.println(this.name+"正在学习"+cName);
    19     }
    20 
    21     @Override
    22     public void drive() {
    23         System.out.println(this.name+"正在驾驶...");
    24     }
    25 
    26 }
    27 
    28 package cn.sxt.interface03;
    29 
    30 public class Teacher implements DriveInterface{
    31     /// …
    32 
    33     @Override
    34     public void drive() {
    35         System.out.println(this.name+"正在学习驾驶技术...");
    36         System.out.println(this.name+"很快学会了飙车...");
    37     }
    38     
    39 }

    【2】接口实现多态

      

     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 }

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

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

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

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

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

    【3】面向接口编程

      在面向接口编程中,接口表示一种约定(协议),约定(规范)了实现类应该具备(has a)的能力.

      理解:

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

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

      面向接口编程

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

      面向接口编程时,面向接口的约定而不考虑接口的具体实现。

      也就是说,面向接口编程时,接口中的定义方只关系实现类是否具备了接口所定义的能力,而不关心这个能力是如何被实现的。

      

     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 }

    3 抽象类和接口的异同比较

    1. 抽象类和接口都是引用数据类型。他们不能创建对象。
    2. 他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的方法都是抽象方法。
    3. 抽象类和接口都具有传递性。抽象类中的是单根性(单继承),而接口是多继承。
    4. 在概念上都可以重写抽象方法。子类重写抽象类,实现类实现接口。
    5. 抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题。=>高内聚,低耦合。接口可以用解耦模块。

      

  • 相关阅读:
    C#图片无损压缩
    as3.0 动态文本属性大全
    卡​马​克​卷​轴​算​法​研​究​_​地​图​双​缓​冲
    春卷活动心得
    移动端videojs视频插件使用直播流rtmp、hls、http-flv的注意事项
    在Windows2008系统中利用IIS建立FTP服务器
    winform 窗体自适应 根据新窗体大小按比例放缩
    HTTPS抓包
    数据库 事物 锁
    sql 事物 锁 快照(转发的,写的非常好)
  • 原文地址:https://www.cnblogs.com/qq308015824/p/10771838.html
Copyright © 2020-2023  润新知