Java中不明白的小知识 ---- 接口(续)

Java中接口的使用

格式:

interface 接口名{
    成员变量(缺省属性public static final)
    成员方法(缺省属性abstract修饰)

}

类【遵从】接口 ==> implements

class  类名  implements 接口{}
 

/**
 * 接口演示
 * @Author kk
 * @Date 2020/3/10 19:33
 */
interface A{
    int num = 10;
    public void test();
}

/**
 * 类TypeA遵从接口A
 */
class TypeA implements A{
    @Override
    public void test() {
        System.out.println(num);
        System.out.println("TypeA类遵从接口A,实现接口A中缺省属性为abstract的成员方法");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        TypeA typeA = new TypeA();
        typeA.test();
    }
}

一个类可以遵从多个接口,遵从多个接口时,每个接口的所有缺省属性为abstract的方法必须都实现

interface A{
    int num = 10;
    public void test();
}
interface B{
    public  void testB();
}
class TypeA implements A,B{
    @Override
    public void test() {
        System.out.println(num);
        System.out.println("TypeA类遵从接口A,实现接口A中缺省属性为abstract的成员方法");
    }

    @Override
    public void testB() {
        
    }
}

接口之间可以继承,并且可以多继承!向下兼容

interface C{
    void testC();
}
interface D{
    void testD();
}
interface E extends C, D{
    void testE();
}

如果一个类继承了E接口,那么要实现C D E 的所有缺省属性为abstract的方法 

public class Demo2 implements E{
    @Override
    public void testC() {
        
    }

    @Override
    public void testD() {

    }

    @Override
    public void testE() {

    }
}

(JDK1.8新特征)

interface F{
    /*
        接口当中的默认方法
        default
        default修饰的方法,是拥有方法体的
            1.接口提供了最基本的处理方法,你可以选择重写也可以不重写,
            这叫做默认方法
            2.非强制实现方法,可选完成
     */
    default void testF(){
        System.out.println("接口中的默认方法,非强制重写");
    }
}
class TypeC implements F{
    //遵从了接口F,没有任何的错误,因为接口中的方法是default,非强制实现
}
public class Demo3 {
    public static void main(String[] args) {
        new TypeC().testF();
    }
}

接口的使用要求总结

  1. 接口中的
    成员变量缺省属性 public static final
    成员方法 public abstract
  2. 一个非abstract类遵从interface接口,需要强制完成接口中所有缺省属性为public abstract的成员方法
  3. 接口和接口之间允许使用extends继承,并且允许一个接口继承多个接口:interface A extends B,C
    生活中:协议的向下兼容问题,比如USB3.0的接口支持2.0和1.0的设备
  4. 接口中可以使用default关键字修饰方法,default方法拥有方法体,可以认为是非强制实现方法,不要求遵从接口的非abstract强制实现,JDK1.8新特征

接口的生活化演示

从生活中映射USB接口
    interface USB
        规定USB设备必须完成的方法
        void connect();

鼠标类 implements USB
    鼠标是一个USB设备,必须完成connect方法
键盘类 implements USB
    键盘是一个USB设备,必须完成connect方法
USB接口在电脑上,我们需要使用USB接口
package Test01;

/**
 * @Author kk
 * @Date 2020/3/10 20:26
 */
interface USB{
    /*
        要求所有的USB设备,必须完成的方法,告知USB接口连接之后完成的
        功能是什么
     */
    void connect();
}

/**
 * 鼠标类,遵从USB接口,实现connect方法
 */
class Mouse implements USB{
    @Override
    public void connect() {
        System.out.println("鼠标连接USB接口,控制光标");
    }
}
/**
 * 键盘类,遵从USB接口,实现connect方法
 */
class Keyboard implements USB{
    @Override
    public void connect() {
        System.out.println("键盘连接USB接口,输入设备");
    }
}

/**
 * PC电脑类,使用USB接口,需要通过USB接口连接一个USB设备
 */
class PC{
    /**
     * 电脑类连接USB接口的方法,这里需要的是一个USB设备
     * @param usb USB接口对应的设备
     */
    public void usbConnect(USB usb){
        //usb设备执行connect方法
        usb.connect();
    }
}

/**
 * Logi类,继承鼠标Mouse类
 *  1.这是一个鼠标设备
 *  2.Logi间接遵从USB接口,这也是一个USB设备
 */
class Logi extends Mouse{
    @Override
    public void connect(){
        System.out.println("我是一个Logi鼠标");
    }
}

/**
 * Filco继承Keyboard类
 *  1.这是一个键盘设备
 *  2.这也是间接遵从了USB接口,是一个USB设备
 */
class Filco extends Keyboard{
    @Override
    public void connect(){
        System.out.println("我是一个Filco键盘");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        //电脑中有个方法是使用USB接口连接USB设备
        PC pc = new PC();

        //鼠标和键盘都是USB设备
        Mouse mouse = new Mouse();
        Keyboard keyboard = new Keyboard();

        //电脑需要通过USB接口连接USB设备,鼠标和键盘都有一个相同的USB接口
        pc.usbConnect(mouse);
        pc.usbConnect(keyboard);

        //传入一个Logi对象
        pc.usbConnect(new Logi());
        //传入一个Filco对象
        pc.usbConnect(new Filco());

    }
}
发布了19 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42597414/article/details/104781213