接口的定义、特点、实现

接口

1、概念

接口的目的是指相关或者不相关类的多个对象的共同行为

接口体现了程序设计的多态和高内聚低耦合的设计思想

接口反应某一类事物具有什么能力

  • 关注该类事物可以完成什么操作

  • 但是不关注操作的具体细节

2、声明接口

  • 修饰符 interface 接口名称();

  • 所有的接口都是抽象的

 

3、继承接口

修饰符 interface 子接口名称 extends 父接口名称1,父接口名称2....

4、实现接口

修饰符 class 类名 implements 接口名

具体类实现接口要实现接口中的方法

5、接口的特点

  • 接口不是类、没有构造方法、不能实例化

  • 接口之间的继承也是用 extends 实现 但接口可以继承多个父接口

  • 接口中所有“没有方法体”的方法都是抽象方法( 默认都是 public abstract 修饰 )

  • 在接口中只能声明常量默认是 public static final 修饰的

6、接口在 Java 8 的反人类操作

  • 从 Java 8 开始允许在接口中定义 static 修饰的方法

    • 访问修饰符可以是 public 、 private

    • 访问修饰符 不可以是 protected 或 默认

  • 从 Java 8 开始允许在接口中定义 default 修饰的、非抽象的方法

7、示例

 

充电接口

 package interfaceTest;
 
 public interface Chargeable {
 
     void charge();
 
 }

 

可传输的接口

 package interfaceTest;
 
 /**
  * 可传输的,便携式的
  *
  * */
 
 public abstract interface Transfer { // 所有的接口都是抽象的
     // 接口中所有的没有方法体的方法都是 默认 public abstract 修饰的
     void transmission();
 }

 

USB 接口 继承 Transfer 和 Chargeable

 package interfaceTest;
 
 /**
  * 1、在 Java 语言中 一个接口可以同时继承多个 父接口
  * 2、当一个接口继承多个父接口时,父接口名称之间使用 逗号 隔开
  *
  * */
 
 public interface USB extends Chargeable, Transfer {
 
 }

UGreen 实现 USB 接口

 package interfaceTest;
 
 public class UGreen implements USB {
     @Override
     public void transmission() {
         System.out.println("UGreen: transmission");
    }
 
     @Override
     public void charge() {
         System.out.println("UGreen: charge");
    }
 }
 

 

HuaWei 实现 USB 接口

 package interfaceTest;
 
 public class HuaWei implements USB{
     @Override
     public void charge() {
         System.out.println("HuaWei: charge");
    }
 
     @Override
     public void transmission() {
         System.out.println("HuaWei: transmission");
    }
 }
 

USBTest 类

 package interfaceTest;
 
 public class USBTest {
     public static void main(String[] args) {
 
         // USB u = new USB(); // 不能实例化接口
 
 
         USB usb = null; // USB 是 usb 的编译时类型
 
         // 接口类型的引用变量 指向了 其实现类类型的实例
         usb = new UGreen();
 
         usb.charge(); // 充电
         usb.transmission(); // 传输数据
 
         usb = new HuaWei();
         usb.charge(); // 充电
         usb.transmission(); // 传输数据
 
    }
 }
 

TransferTest 类

 package interfaceTest;
 
 public class TransferTest {
 
     public static void main(String[] args) {
         Transfer t = null; // 变量 t 的编译时 类型是 Transfer
         t = new UGreen();
         // 通过 变量 t 只能调用直接在 Transfer 中声明方法 Object 类
         t.transmission();
 
         String s = t.toString(); // 调用 Object 类中的方法
 
    }
 }
 

 

posted @ 2020-05-27 20:05  ZachYoung  阅读(1115)  评论(0)    收藏  举报