【Java学习笔记】接口

发布于:2022-12-21 ⋅ 阅读:(198) ⋅ 点赞:(0)

接口

1. 接口的基本介绍

接口就是给出一些没有实现的方法,封装到一起,到某个类使用的时候,在根据具体情况把这些方法写出来

1.1 语法

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

1.2 小结

  1. 在JDk7.0前的接口里的所有方法都没有方法体。
  2. 在JDK8.0后的接口可以有静态方法,默认方法,也就是接口中可以有方法的具体实现。注:需要加上default或static关键字。

2. 接口的应用场景

2.1 实际需求

3个程序员,编写三个类,分别完成对Mysql,Oracle,DB2数据库的连接 connect,close…

若三个程序员命名的方法都不一样,那么项目代码管理十分繁琐。若写一个接口,在其中规定两个方法,三个程序员都要实现这三个方法,那么方法名得到统一,便于后期代码管理。

2.2 具体代码

public interface DBInterface {
  void connect();
  void close();
}
public class DBMysql implements DBInterface {
  public void connect() {
    System.out.println("连接Mysql数据库...");
  }
  
  public void close() {
    System.out.println("关闭Mysql数据库...");
  }
}

还有两种数据库就不一一举例,实现方式大同小异。

// 测试代码
public class InterfaceTest {
  public static void main(String[] args) {
    DbMysql mysql = new DBMysql();
    // 如果使用其他数据库,只需要更改参数即可
    t(mysql);
  }
  
  public static void t(DBInterface db) {
    db.connect();
    db.close();
  }
}

3. 接口使用细节

  1. 接口不能被实例化。

  2. 接口中所有方法的修饰符都是public,接口中的抽象方法可以不用abstract关键字修饰。

    // 二者在本质上相等:
    void connect()
    abstract void connect();
    
  3. 普通类实现接口必须实现接口中所有的方法。

  4. 抽象类实现接口不用实现接口中的方法。

  5. 一个类可以实现多个接口。

  6. 接口中的所有属性都是public static final修饰的。

  7. 接口中属性的访问形式:接口名.属性名

  8. 接口不能继承其他类,但是可以继承多个其他接口。

    interface A extends B, C {
    }
    
  9. 接口的修饰符只能是public和默认,这和类是一样的。

4. 接口和继承

当子类继承了父类,就拥有了父类的功能。如果子类需要拓展原有的功能,就可以使用实现接口这个机制。

以下是同时运用继承和接口的案例:

public class ExtendsVsInterface {
    public static void main(String[] args) {
        LittleMonkey wuKong = new LittleMonkey("悟空");
        wuKong.climbing();
        wuKong.swimming();
        wuKong.flying();
    }
}

public class Monkey {
    private String name;

    public Monkey(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void climbing() {
        System.out.println("猴子会爬树...");
    }
}

// 接口
public interface Fishable {
    void swimming();
}

public interface Birdable {
    void flying();
}

// 继承
public class LittleMonkey extends Monkey implements Fishable, Birdable {
    public LittleMonkey(String name) {
        super(name);
    }

    @Override
    public void swimming() {
        System.out.println(getName() + "通过学习可以游泳...");
    }

    @Override
    public void flying() {
        System.out.println(getName() + "通过学习可以飞翔...");
    }
}

继承是需要满足is - a的关系。但接口只需要满足like - a的关系。

接口在一定程度上实现代码解耦。

5. 接口的多态特性

5.1 代码实现

public class Interface01 {
    public static void main(String[] args) {
        // 创建手机, 相机对象
        Phone phone = new Phone();
        Camera camera = new Camera();
        // 创建计算机
        Computer computer = new Computer();
        computer.work(phone); // 把手机接入到计算机
        computer.work(camera); // 把相机接入到计算机
    }
}

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

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

    @Override
    public void stop() {
        System.out.println("手机停止工作.");
    }
}

public class Camera 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.start();
        usbInterface.stop();
    }
}

5.2 解析

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

视频教程:韩顺平 30天零基础学Java

注:第一次发文,请多多支持! ★,°:.☆( ̄▽ ̄)/$:.°★

谢谢阅读

本文含有隐藏内容,请 开通VIP 后查看