tzkf

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

接口

基本介绍 :接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体的情况把这些方法写出来,在接口中的抽象方法可以省略abstract关键字。

语法:

interface 接口名{
  //属性
  //方法
}
class 类名 implements 接口名{
  //自己的属性
  //自己的方法
  //必须实现的接口的抽象方法
}

代码

public interface UsbInterface { //接口 
  //规定接口的相关方法
  public void start(); 
  public void stop(); 
}

public class Camera implements UsbInterface{//实现接口,就是把接口方法实现 	
  @Override public void start() { 
    System.out.println("相机开始工作..."); 
  }
  @Override public void stop() { 
    System.out.println("相机停止工作...."); 
  } 
}

//Phone 类实现 UsbInterface 
//即 Phone 类需要实现 UsbInterface 接口规定/声明的方法 
public class Phone implements UsbInterface { 
  @Override public void start() { 
    System.out.println("手机开始工作..."); 
  }
  @Override public void stop() { 
    System.out.println("手机停止工作....."); 
  } 
}

public class Computer{
  public void work(UsbInterface usbInterface){
    usbInterface.satrt();
    usbInterface.stop();
  }
}

public class Interface01 { 
  public static void main(String[] args) { 
    //创建手机,相机对象
    //Camera 实现了 UsbInterface 
    Camera camera = new Camera();
    //Phone 实现了 UsbInterface 
    Phone phone = new Phone(); 
    //创建计算机 
    Computer computer = new Computer();
    computer.work(phone);
    //把手机接入到计算机 
    System.out.println("===============");
    //把相机接入到计算机//把相机接入到计算机
    computer.work(camera); 
  } 
}
public interface DBInterface { //项目经理 
  public void connect();//连接方法 
  public void close();//关闭连接 
}

//mysql操作
public class MysqlDB implements DBInterface { 
  @Override public void connect() { 
    System.out.println("连接 mysql");
  }
  @Override public void close() { 
    System.out.println("关闭 mysql"); 
  } 
}

//oracle操作
public class OracleDB implements DBInterface{ 
  @Override public void connect() { 
    System.out.println("连接 oracle"); 
  }
  @Override public void close() { 
    System.out.println("关闭 oracle"); 
  } 
}

public class Interface03 { 
  public static void main(String[] args) {
    MysqlDB mysqlDB = new MysqlDB(); 
    test(mysqlDB);
    OracleDB oracleDB = new OracleDB(); 
    test(oracleDB); 
  }
  public static void test(DBInterface db) { 
    db.connect(); 
    db.close(); 
  } 
}

jdk7.0前,接口里的所有方法都没有方法体

public void function();

jdk8.0后接口类可以有静态方法(加上static),默认方法,(需要在前面default),也就是说接口中可以有方法的具体实现

default public void function(){}
public static void function(){}
接口细节
  1. 接口不能被实例化
  2. 接口中的所有方法都是public方法,接口中的抽象方法,可以不用abstract修饰
  3. 一个普通类实现接口,就必须将该接口的所有方法都实现,(快捷键 alt+enter)
  4. 抽象类去实现接口时,可以不用实现接口的方法
  5. 一个类同时可以实现多个接口
  6. 接口中的属性,只能是final的,而且是public static final 修饰符 比如:int n=1;实际上是public static final int n=1;(必须初始化)
  7. 接口中属性的访问形式:接口名.属性名
  8. 接口不能继承其他的类,但是可以继承多个别的接口
interface A extends B,C{}
  1. 接口的修饰符只能是public和默认,这点和类的修饰符是一样的
实现接口 VS 继承类
  1. 接口和继承解决的问题不同
    继承的价值主要在于:解决代码的复用性和可维护性。
    接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这些方法。即更加的灵活..
  2. 接口比继承更加灵活
    接口比继承更加灵活,继承是满足is - a的关系,而接口只需满足like - a的关系。
  3. 接口在一定程度上实现代码解耦[即:接口规范性+动态绑定机制]
接口的多态特性

接口可以接收实现该接口的类的对象

  1. 多态参数(前面案例体现)
    在前面的Usb接口案例,UsbInterface usb,既可以接收手机对象,又可以接收相机对象,就体现了接口多态(接口引用可以指向实现了接口的类的对象)

  2. 多态数组
    案例:给Usb数组中,存放Phone和相机对象,Phone类还有一个特有的方法call() ,请遍历Usb数组,如果是Phone对象,除了调用Usb接口定义的方法外,还需要调用Phone特有方法call。

    Usb usbs[] = new Usb[2];
    usbs[0] = new Phone();
    usbs[1] = new Camera();
    for (inti= 0; i < usbs.length; i++) {
      usbs[i].start();
      usbs[i].stop();
      if (usbs[i] instanceof Phone) {
      	((Phone)usbs[i].call();//向下转型
       }
    }
    

posted on 2022-04-10 22:23  T冰镇西瓜  阅读(27)  评论(0编辑  收藏  举报