美文网首页java基础
Java基础-day12-接口

Java基础-day12-接口

作者: 触手不可及 | 来源:发表于2021-06-26 08:28 被阅读0次

    接口

    1. 接口

    1.1 接口使用操作
    1. 接口可以通过extends关键字,继承其他接口
        相当于电子设备的协议兼容 USB3.1 ==> USB3
    
    2.存在继承联系的接口,如果出现了相同的方法,实现类继承当前接口时,只需要完成一个。
        相当于电子设备的协议相同。 Type-C接口
    
    3.接口中可以使用default关键字来描述默认方法。当前默认方法可以有方法体,实现类非强制要求完成。 JDK1.8特征
    
    interface A {
        void test();
    }
    
    interface B {
        void test();
    }
    
    /**
     * 接口可以通过extends关键字继承其他接口,并且允许接口之间的多继承。
     * @author Anonymous
     *
     */
    interface C extends A, B {
        void test();
    }
    
    class TypeA implements C {
    
        @Override
        public void test() {
            System.out.println("不同接口之间存在相同方法,如果一个类遵从这些接口,完成一次相同方法即可");  
        }
        
    }
    
    public class Demo1 {
    
    }
    

    2. 多态

    2.1 动物园
    第一个问题:
        请问动物能不能看做是一个类? 可以
    
    第二个问题:
        熊猫,老虎,猴子请问能不能各自看作是一个类? 可以
    
    第三个问题:
        熊猫,老虎,猴子 请问是不是动物? 是
    
    package com.qfedu.b;
    
    /**
     * 动物类
     * @author Anonymous
     *
     */
    class Animal {
        
    }
    
    /**
     * 熊猫类,是动物类的子类
     * @author Anonymous
     *
     */
    class Panda extends Animal {
        
    }
    
    /**
     * 老虎类,是动物类的子类
     * @author Anonymous
     *
     */
    class Tiger extends Animal {
        
    }
    
    /**
     * 程序猿类,是动物类的子类
     * @author Anonymous
     *
     */
    class CodingMonkey extends Animal {
        
    }
    
    public class Demo1 {
        public static void main(String[] args) {
            Animal animal = new Animal();
            Panda panda = new Panda();
            Tiger tiger = new Tiger();
            CodingMonkey codingMonkey = new CodingMonkey();
            
            // 当前方法传入一个Animal类对象,符合当前方法参数要求的。
            feedAnimal(animal);
            
            // 这里传入的参数是Panda类对象,Panda类对象是Animal类的一个子类,也是动物
            feedAnimal(panda);
            
            // 传入Tiger类对象和CodingMonkey类对象同理 Panda参数传入
            feedAnimal(tiger);
            feedAnimal(codingMonkey);
            
            System.out.println();
            /*
             *  强制类型转换!!!
             *  当前方法的返回值数据类型是Animal类型,但是实际上数据类型是CodingMonkey类型
             *  这里可以使用强制类型转换,将Animal类型包装的CodingMonkey对象,真正的看作是
             *  CodingMonkey
             *  
             *  引用数据类型的强制类型转换,是允许大家使用操作的。前提是保证数据类型强转的合理性。
             */
            CodingMonkey codingMonkey2 = (CodingMonkey) getAimal();
            System.out.println(codingMonkey2.getClass());
        }
        
        /**
         * 这里是一个喂食动物的方法,需要的参数是一个动物类对象。
         * 
         * @param animal Animal类对象。
         */
        public static void feedAnimal(Animal animal) {
            // getClass() 展示当前类对象的完整包名.类名
            System.out.println(animal.getClass() + "来吃饭了");
        }
        
        /**
         * 当前方法是获取一个Animal对象的方法
         * 
         * @return Animal类对象
         */
        public static Animal getAimal() {
    //      return new Animal();
    //      return new Panda();
    //      return new Tiger();
            return new CodingMonkey();
        }   
    }
    
    2.2 USB接口
    USB是一个接口
        interface USB {
            void connect();
        }
    
    键盘,鼠标这里需要遵从USB接口,也就是USB设备
    
    package com.qfedu.b;
    
    /**
     * USB接口
     * @author Anonymous
     *
     */
    interface USB {
        void connect();
    }
    
    /**
     * 键盘类,遵从USB接口,这是USB设备
     * @author Anonymous
     *
     */
    class Keyboard implements USB {
    
        @Override
        public void connect() {
            System.out.println("键盘敲烂,月薪过万");
        }   
    }
    
    /**
     * 键盘类的子类
     * Filco类是不是USB设备。这里间接遵从USB接口
     * @author Anonymous
     *
     */
    class Filco extends Keyboard {
        @Override
        public void connect() {
            System.out.println("Filco 茶轴");
        }
    }
    
    /**
     * 鼠标类,遵从USB接口,也是一个USB设备
     * @author Anonymous
     *
     */
    class Mouse implements USB {
    
        @Override
        public void connect() {
            System.out.println("鼠标");
        }
        
    }
    
    /**
     * Logi是鼠标类的子类
     * 同样也是USB设备
     * @author Anonymous
     *
     */
    class Logi extends Mouse {
        @Override
        public void connect() {
            System.out.println("罗技 G502");
        }
    }
    
    /**
     * PC类,电脑上存在USB接口,可以连接USB设备
     * @author Anonymous
     *
     */
    class PC {
        /**
         * PC类连接使用USB接口的方法,这里需要【USB设备】连接的是一个USB接口
         * 
         * @param usb USB接口,等待USB设备连接
         */
        public void useUsbInterface(USB usb) {
            usb.connect();
        }
    }
    
    public class Demo2 {
        public static void main(String[] args) {
            Keyboard keyboard = new Keyboard();
            Mouse mouse = new Mouse();
            
            PC pc = new PC();
            
            /*
             * 电脑连接USB设备,通过useUsbInterface方法,该方法参数是USB接口数据类型
             * 这里需要通过USB接口,去连接USB设备
             */
            pc.useUsbInterface(keyboard);
            pc.useUsbInterface(mouse);
            
            pc.useUsbInterface(new Filco());
            pc.useUsbInterface(new Logi());
        }
    }
    
    2.3 多态总结
    父类的引用指向子类的对象
    接口的引用指向遵从接口的实现类对象
        这就是多态!!!
        
    多态作用:
        1. 拓宽方法的参数范围!!!【常用】
            参数类型要求是父类,这里传入父类对象或者其子类对象,都可以满足方法要求
            参数类型要求是接口,这里传入直接或者间接的接口实现类对象,也是OK的
        2. 拓宽方法的返回值范围!!!【常用】
            返回值类型是父类对象,这里实际返回数据时父类对象或者其子类对象,OK!!!
            返回值类型是接口类型,这里实际返回数据时直接或者间接实现类对象,都可
            以!!
    

    相关文章

      网友评论

        本文标题:Java基础-day12-接口

        本文链接:https://www.haomeiwen.com/subject/yvmnyltx.html