接口

1.接口基础知识
 1.为什么需要接口
 2.什么是接口?
 语法:
  [修饰符] interface 接口名 extends 父接口1,父接口2,......{
   //常量定义
   //方法定义
  }
 
 语法:
  class 类名 extends 父类名 implements 接口1,接口2,.......{
   //类成员
  }
 说明:1.接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见;如果省略修饰符,则该      接口只在当前包可见。
      2.接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final修饰,即接口中      的属性都是全局静态常量。接口中的常量必须在定义时指定初始值。

  public static final int PI = 3.14;
  int PI = 3.14;//在接口中,这两个定义语句效果完全相同
  int PI;//错误!在接口中必须指定初始值,在类中会有默认值
 
       3.接口中所有方法都是抽象方法。接口中方法都会自动用public abstract 修饰,即接口中只有全局抽  象方法。
       4.和抽象类一样,接口也不能实例化,接口中不能有构造方法。
       5.接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
       6.接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。

 一个类只能有一个直接父类,但可以通过implements实现多个接口。当类在继承父类的同时又实现了多个接口时,extends关键字必须位于implements关键字之前。
 在现实生活中,USB接口相关工作是按照如下步骤进行的:
  1.约定USB接口标准
  2.制作符合USB接口约定的各种具体设备
  3.将USB设备插到USB接口上进行工作。
  按照以上步骤,先定义USB接口,通过service()方法通过服务,代码如下:
   /**
    *USB接口
    */
   public interfce UsbInterface{
          /**
     *USB接口提供服务
    */
    void service();
   }
  定义U盘类,实现USB接口中的service()方法,进行数据传输,代码如下:
   /**
    *U盘
    */
   public class UDisk implements UsbInterface{
    public void service(){
     System.out.println("连接USB口,开始传输数据。");
    }
   }   

  定义USB风扇类,实现USB接口中的service()方法,获得电流使风扇转动,代码如下:
   /**
    *USB风扇
    */ 
   public class UsbFan implements UsbInterface{
    public void service(){
     System.out.println("连接USB口,获得电流,风扇开始转动。");
    }
   }
  编写测试类,实现使用U盘传输数据,使USB风扇转动,代码如下:
   /**
    *测试类
    */
   public class Test{
    public static void main(String [] args){
     //1.U盘
     UsbInterface uDisk = new UDisk();
     uDisk.service();
     //2.USB风扇
     UsbInterface usbFan = new UsbFan();
     usbFan.service();
    }
   }
   以上代码声明了接口UsbInterface,实例化其实现类Udisk类和UsbFan类,遵循了多态中向上   转型的规则。
2.接口表示一种能力
 1.使用接口实现防盗门功能
  经过USB接口的模拟,我们已经了解了Java接口的语法和规则,现在就使用接口来实现防盗门功能。
  防盗门是一个门,符合is a 的关系,可以抽象出一个门类。防盗门有一把锁,代表它有“上锁”和“开锁”的能力,表达的是has a 的关系,这里可以将锁定义成接口,让防盗门继承门类实现锁接口。具体步骤如下:
   1.定义抽象类Door类,具有开和关的功能。
   2.定义Lock接口,具备"上锁"和"开锁"的能力。
   3.定义TheftproofDoor类,继承Door类的同时实现Lock接口。
   4.编写测试类,实现防盗门的开,关和上锁,开锁的功能。
  定义Door类,具有开和关的功能,代码如下:
   /**
    *门
    */
   public abstract class Door{
    public abstract void open();//开
    public abstract void close();//关
   }
   定义Lock接口,具备上锁和开锁的能力,代码如下:
   /**
    *锁,接口
    */
   public interface Lock{
    void lockUp();//上锁
    void openLock();//开锁
   }
   定义TheftproofDoor类,继承Door类,实现Lock接口,代码如下:
   /**
    *防盗门类
    */
   public class TheftproofDoor extends Door implements Look{
    @Override
    public void lockUp(){
     System.out.println("插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙     。");
    }
    @Override
    public void openLock(){
     System.out.println("插进钥匙,向右旋转钥匙三圈,锁打开了,拔出钥     匙");
    }
    @Override
    public void open(){
     System.out.println("用力推,门打开了。");
    }
    @Override
    public void close(){
     System.out.println("轻轻拉门,门关上了。");
    }
   }
  编写测试类,实现防盗门的关门、上锁、开锁和开门的功能,代码如下:
   /**
    *测试类
    */
   public class DoorTest{
    public static void main(String [] args){
     //创建具体防盗对象
     TheftproofDoor tfd = new TheftproofDoor();
     tfd.close();//关门
     tfd.lockUp();//上锁
     tfd.openLock();//开锁
     tfd.open();//开门
    }
   }
   运行结果如下:
    轻轻拉门,门关上了。
    插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙。
    插进钥匙,向右旋转钥匙三圈,锁打开了,拔出钥匙。
    用力推,门打开了。
   通过以上案例我们理解了接口表示一种能力。一个类实现了某个接口,就表示这个类具备了      某种能力。
   例如,当客人来访时,只要来人轻按门铃,便自动拍照存储。需要再为防盗门增加一种能力      ,其实现如示例所示:
   /**
    *门铃接口
    */ 
   public interface DoorBell{
    void takePictures();//拍照存档功能
   } 
   为防盗门增加门铃的功能,代码如示例:
   public class TheftproofDoor extends Door implements Lock,DoorBell{
    //省略其他实现方法
    @Override
    public void takePictures(){
     System.out.println("铃......咔嚓......照片已存储");
    }
   }
   修改测试类,代码如下:
   /**
    *测试类
    */
   public class DoorTest{
    public ststic void main(String [] args){
     //创建具体防盗对象
     TheftproofDoor tfd = new TheftproofDoor();
     tfd.close();//关门
     tfd.lockUp();//上锁
     tfd.takePictures();//来访客人拍照存储
     tfd.openLock();//开锁
     tfd.open();//开门
    }
   }
   运行结果如下:
    轻轻拉门,门关上了。
    插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙。
    铃......咔嚓......照片已存储
    插进钥匙,向右旋转钥匙三圈,锁打开了,拔出钥匙。
    用力推,门打开了。
   
3.接口表示一种约定
 1.使用接口实现打印机打印功能
4.在C#中使用接口
 1.使用C#实现打印机打印功能
  C#中打印接口的语法如下:
   语法:
    [修饰符] interface 接口名;父接口1,父接口2,......{
     属性定义
     方法定义
    }
   语法:
    class 类名;父类名,接口1,接口2,......{}
  说明:
   1.接口之间可以通过冒号“:”来实现继承关系,一个接口可以继承多个接口,但接口不能继承类。类只能继承一个父类,但可以实现多个接口,使用冒号“:”来继承类并实现接口。
   2.接口定义零个或多个成员,成员主要是方法、属性和索引器。接口中不能包含常量、变量或构造方法,也不能包含任何静态成员。
   3.接口中成员访问权限是public,定义接口时显示指定任何修饰符都是非法的。
   4.按照惯例,C#中接口的名称以大写字母“I”开头。

5.在Java与C#两种语言中,接口具有以下区别:
 1.Java中接口通过extends来继承父接口,类通过implements实现接口;C#中通过冒号“:”来实现这两个功能。
 2.Java接口中的成员变量(属性)都是变量,自动用public static final修饰;C#接口中不允许存在成员变量,但可以有属性。
 3.Java接口中属性和方法都可以使用public 修饰;C#中默认为public,但不允许显式使用public修饰。
 4.Java接口中可以定义静态常量和方法,C#接口中不允许包含任何静态成员。

原文地址:https://www.cnblogs.com/fl72/p/8482865.html