• Java接口(Interface)


    usb插槽就是现实中的接口。
    你可以把手机,相机,u盘都插在usb插槽上,而不用担心那个插槽是专门插哪个的,原因是做usb插槽的厂家和做各种设备的厂家都遵守了统一的规定包括尺寸,排线等等。

    image-20221116114328607

    image-20221116114431964

    首先创建Usb接口 UsbInterface.java

    package src.interface_;
    
    public interface UsbInterface {
        public void start();
    
        public void stop();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Camera.java

    package src.interface_;
    
    public class Camera implements UsbInterface {
    
        @Override
        public void start() {
            System.out.println("相机开始工作.......");
        }
    
        @Override
        public void stop() {
            System.out.println("相机停止工作");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Phone.java

    public class Phone implements UsbInterface {
        @Override
        public void start() {
            System.out.println("手机开始工作....");
        }
    
        @Override
        public void stop() {
            System.out.println("手机停止工作.....");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    最后我们模拟电脑工作时候的流程, 插入设备开始 - 然后结束

    package src.interface_;
    
    public class Computer {
        public void work(UsbInterface usbInterface) {
            usbInterface.start();
            usbInterface.stop();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们实例化各个类试试 TestInterface.java

    package src.interface_;
    
    public class TestInterface {
        public static void main(String[] args) {
            Camera camera = new Camera();
            Phone phone = new Phone();
            // 创建计算机
            Computer computer = new Computer();
            // 模拟把相机插入电脑
            computer.work(camera);
            // 模拟把手机插入电脑
            computer.work(phone);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    接口语法
    interface 接口名{
        //属性
        //方法
    }
    
    • 1
    • 2
    • 3
    • 4
    class 类名 implements 接口{
        自己属性;
        自己方法;
        必须实现的接口的抽象方法;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    jdk8.0后接口类可以有静态方法, 默认方法, 也就是说接口中可以有方法的具体实现.

    对初学者讲理解接口的概念不算太难,难的是不知道什么时候使用接口,下面我例举几个应用场景:

    1.说现在要制造战斗机,武装直升机.专家只需把飞机需要的功能/规格定下来即可,然后让别的人具体实现就可。

    2.说现在有一个项目经理,管理三个程序员,功能开发一个软件为了控制和管理软件项目经理可以定义一些接口,然后由程序员具体实现。


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

    注意事项和细节
    1. 接口不能被实例化
    2. 接口中所有的方法是public方法, 接口中抽象方法可以不用abstract修饰
    3. 一个普通类实现(implements)接口,就必须将该接口的所有方法都实现
    4. 抽象类实现接口, 可以不用实现接口的所有方法
    5. 一个类可以同时实现多个接口
    6. 接口中的属性只能是final的, 而且是public static final修饰符
    7. 接口中属性的访问形式:接口名.属性名
    8. 接口不能继承其他的类, 但是可以继承多个别的接口
    9. 接口的修饰符只能是public和默认, 这点和类的修饰符是一样的
    实现接口VS.继承类

    继承的价值主要在于:解决代码的复用性和可维护性。
    接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这些方法。即更加的灵活…

    接口比继承更加灵活, 继承是满足is - a的关系,而接口只需满足like - a的关系

    接口在一定程度上实现代码解耦[即:接口规范性+动态绑定]

    接口的多态特性

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

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

    接口存在多态传递现象.

    小练习
    interface A {
        int x = 0;// 等价于 public static final int x=0
    }
    
    class B {
        int x = 1;// 普通属性
    }
    
    public class C extends B implements A {
        public void pX() {
            // System.out.println(x); //错误,x不明确
            // 可以明确的指定x
            // 访问接口的x就是用A.x
            // 访问父类的x就是用super.x
            System.out.println(A.x + " " + super.x);
        }
    
        public static void main(String[] args) {
            new C().pX();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    image-20221116164910210

  • 相关阅读:
    在Oracle中创建DBLINK
    Spring Boot:利用JPA进行数据库的查删
    【C#】中IndexOf的用法
    ts查缺补漏
    python详解(4)——异常、类、作用域and自定义模块
    PGSQL中distinct和distinct on的用法与区别
    [附源码]计算机毕业设计物业管理系统Springboot程序
    论文阅读笔记:《一种改进的图卷积网络半监督节点分类》
    express学习40-多人管理31数据分页2
    单词规律(C++解法)
  • 原文地址:https://blog.csdn.net/Drifter_Galaxy/article/details/127919205