zoukankan      html  css  js  c++  java
  • 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.抽象类和接口的异同比较

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

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

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

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

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

  • 相关阅读:
    守望先锋-生涯数据信息抓取的实现
    Norm 数据库操作竟然可以如此简单
    java中关于转义字符的一个bug
    在Java中==的一个坑
    人机ai五子棋 ——五子棋AI算法之Java实现
    MySQL数据库罕见的BUG——Can't get hostname for your address
    [疑难杂症]__关于cmd命令正确而显示不是内部指令的错误(ps:已解决)
    [疑难杂症]__点击win10屏幕最上方的边界会莫名其妙打开Internet Explorer浏览器,不胜其烦(2次ps:已解决!!!).
    [Java初探外篇]__关于正则表达式
    [java初探外篇]__关于StringBuilder类与String类的区别
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/10771273.html
Copyright © 2011-2022 走看看