0
点赞
收藏
分享

微信扫一扫

【JavaSE】还不懂接口的妙用?接口、接口的应用场景与接口的多态特性了解一下

彭维盛 2022-05-06 阅读 77

文章目录


1 接口引入

👧 基本介绍:
接口就是给出一些没有实现的方法,封装到一起,到某个类需要使用的时候,再根据具体情况实现方法。 其基本语法如下:

// 定义接口
interface 接口名{
	属性;
	方法;
}

// 具体类实现接口
class 类名 implements 接口名{
	属性;
	方法;
	实现所有接口中的抽象方法;
}

🅰️ 注意! jdk7.0 以前,接口里的所有方法都没有方法体,都是抽象方法;在 jdk8.0 后,接口可以有静态方法,默认方法,即可以有方法的具体实现。

🍑 示例:

在这里插入图片描述


2 接口的应用场景

🐍 深入讨论:
对于萌新来说,接口的概念和基本使用其实并不难,难点就在于我们并不知道什么时候该用接口,下面我们来举几个实际例子:

  1. ⭐️ 需要制造一批汽车。专家只需要把汽车需要的功能(导航、刹车、座椅调节等)以及规格(各种零件大小等)定下来即可,剩下的让工人具体实现就行。
    在这里插入图片描述

  2. ⭐️ 有一个项目经理,管理3个程序员开发一个软件。为了控制和管理软件,项目经理定义一些接口,然后由程序员具体实现(虽然程序员可以直接写相应的类,但是难免会不合规范,比如需要写三个类,每个类都需要实现连接一种数据库的方法,程序员 A 取名为 f1(),程序员 B 取名为 con(),程序员 C 取名为 connect() ,这就产生了,连接数据库这一操作竟然有三个不同名称的方法,到底该用哪个呢?无形中增加了思考维护的成本)
    在这里插入图片描述

📓 总的来说,我们可以这样理解接口: 接口其实是一种开发规范,便于我们在实际开发中管理和维护代码。 当然,接口的妙用还不仅如此!后面的接口多态特性,小伙伴们会有更深的体会!


3 接口的使用细节

1️⃣ 接口不能被实例化;

2️⃣ 接口中的所有方法都是 public 方法, 接口中的抽象方法,可以不用 abstract 修饰;
🦆 解释:

3️⃣ 一个普通类实现接口,必须将该接口的所有方法都实现,在 idea 编译器中,可以使用 alt + enter 快捷键来快速实现,图示如下:
在这里插入图片描述
4️⃣ 抽象类可以不实现接口中的所有方法。 没什么好说的,因为是抽象类鸭😄;

5️⃣ 一个类同时可以实现多个接口;
🖊 示例代码:

class 类名 implements 接口1, 接口2......{
	// 实现接口部分
}

6️⃣ 接口中的属性只能是 final 的,而且必须用 public static final 修饰,而且必须初始化;
🦆 例子:

7️⃣ 接口不能继承其它类,但是可以继承多个别的接口;
🖊 示例代码:

interface 接口名 extends 接口1, 接口2......{
    // 定义部分
}

8️⃣ 接口的修饰符只能是 publicdefault

3.1 接口相关练习题

Question: 阅读代码块,编译是否会通过?如果能通过,输出是什么?

interface A{
    int a = 18;
}
class B implements A{

}
public class Main {
    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.a);
        System.out.println(A.a);
        System.out.println(B.a);
    }
}

💫 考点: 接口中的属性只能是 final 的,而且必须用 public static final 修饰,而且必须初始化。

🍎 参考答案:


4 接口的多态特性

4.1 接口的多态参数

📱 在这里我们举个例子:手机、平板与电脑。其中手机、平板分别通过数据线与电脑连接。手机、平板作为USB接口的实现类,实现了开机的方法,图示如下:
在这里插入图片描述
🍌 设计参考示例代码如下:

⭐️ Usb接口

// Usb接口
interface Usb{
    void start();  // 开机抽象方法
}

⭐️ Iphone类

// Iphone类
class Iphone implements Usb{
    @Override
    public void start() {
        System.out.println("iphone 开机......");
    }
}

⭐️ Ipad类

// Ipad类
class Ipad implements Usb{
    @Override
    public void start() {
        System.out.println("ipad 开机......");
    }
}

⭐️ 测试类

public class InterfaceTest {
    public static void main(String[] args) {
        // 创建一个手机,创建一个平板
        Iphone iphone = new Iphone();
        Ipad ipad = new Ipad();
        // 创建一个电脑
        Computer computer = new Computer();
        // 使用设备
        // iphone ipad 均为接口实现类,存在向上转型,是多态参数的体现
        // 不同对象调用不同的方法
        computer.use(iphone);
        computer.use(ipad);
    }
}

🍎 实现结果:

在该例子中,测试方法调用了 Computer类的 use() 方法,根据传入的对象类型不同(iphone 与 ipad)作用的结果不同。 即既可以接收手机对象,又可以接收平板对象,体现了接口的参数多态。

4.2 接口的多态数组

🦆 在这里,博主偷个懒。我们继续使用上面的手机、平板、电脑的例子。只不过有一些区别:

🍌 Iphone类修改:

// Iphone类
class Iphone implements Usb{
    @Override
    public void start() {
        System.out.println("iphone 开机......");
    }
    // 打电话
    public void call(){
        System.out.println("iphone 打电话中......");
    }
}

🍑 测试类修改:

public class InterfaceTest {
    public static void main(String[] args) {
        // 创建 Usb 数组
        Usb[] usb = new Usb[2];
        usb[0] = new Ipad();
        usb[1] = new Iphone();
        // 判断类型,相应操作
        for (int i = 0; i < usb.length; i++) {
            usb[i].start();
            // 如果是手机
            if (usb[i] instanceof Iphone){
                ((Iphone) usb[i]).call();
            }
        }
    }
}

🍎 实现结果:

🖊 这里使用到了向下转型,其中 usb 就是多态数组。 向下转型相关请传送:
❤️ 【JavaSE】面向对象之多态、向上转型与向下转型

4.3 接口的多态传递现象

🦆 在本文中,我们已经学习到, 接口类型的变量可以指向实现了该接口的类的实例对象。 而特别地,当接口类型的变量指向实现了继承该接口的类的实例对象,我们就称之为接口的多态传递现象。 即接口类型的变量,也可以指向实现了该接口的子接口的实例对象(当然没有子接口这一说法哦~)。
📓 示例代码如下:

在这里插入图片描述
🚗 示例图片如下:
在这里插入图片描述

🍑 解释: Iphone 继承了 Usb接口, 而 Ipad 类实现了 Iphone 接口实际上就相当于 Ipad类 实现了 Usb接口


写在最后

🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ !
如果有问题,欢迎私信或者评论区!
在这里插入图片描述

共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”
在这里插入图片描述

举报

相关推荐

0 条评论