zoukankan      html  css  js  c++  java
  • 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. 抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题。=>高内聚,低耦合。接口可以用解耦模块。

      

  • 相关阅读:
    织梦开发——相关阅读likeart应用
    织梦标签教程
    织梦专题调用代码
    HIT 2543 Stone IV
    POJ 3680 Intervals
    HIT 2739 The Chinese Postman Problem
    POJ 1273 Drainage Ditches
    POJ 2455 Secret Milking Machine
    SPOJ 371 Boxes
    HIT 2715 Matrix3
  • 原文地址:https://www.cnblogs.com/qq308015824/p/10771838.html
Copyright © 2011-2022 走看看