zoukankan      html  css  js  c++  java
  • 接口

    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#接口中不允许包含任何静态成员。

  • 相关阅读:
    Mishka and Interesting sum
    Tree Restoring
    LIB 配置文件读写器
    WCF 采用net.tcp协议实践
    MVC ViewEngineResult实际上是一种设计
    MVC 依赖注入扩展
    功能权限设计
    代理上网荟萃
    MD5算法 简介
    MVC _ViewStart文件的作用
  • 原文地址:https://www.cnblogs.com/fl72/p/8482865.html
Copyright © 2011-2022 走看看