zoukankan      html  css  js  c++  java
  • 【Java接口 12】

    一、 接口(interface)

    1、接口等同看作类,接口也是引用数据类型

    2、接口是一个特殊的抽象类,特殊在接口是完全抽象的

    3、接口不能被实例化,并且也没有构造方法

    4、接口只能出现“常量”+“抽象方法”

    5、接口和接口之间可以多继承,类和类之间只能单继承

    6、一个类可以实现多个接口,(实现implements类似于继承extends)

    7、一个非抽象的类实现接口,必须将接口中所有的抽象方法完全覆盖,实现。

    8、接口中所有的数据都是public的,只有接口被实现的时候才能体现是public的

    package com.JavaStudy.study0515;
    
    /**
     * @Author wufq
     * @Date 2020/5/15 14:33
     */
    public interface A
    {
        //常量
        public static final double PI = 3.14;
    
        //程序中没有写final关键字时,系统会默认添加
        int BYTE_MAX_VALUE = 127;
    
        //抽象方法   --->接口中只能出现常量和抽象方法
        public abstract void m1();
    
        //同样抽象方法,不写abstract系统会默认添加
        void m2();
    
        //-->接口方法中不能有构造方法
        //void m3(){};
    
        //接口不能实例化,不能有构造方法
        //public A(){};
    
    }
    
    interface X{
        void m1();
    }
    
    interface Y{
        void m2();
    }
    
    interface Z{
        void m3();
    }
    
    //一个类可以实现多个接口,并且需要把接口里面的方法都实现
    class k implements X,Y,Z{
        public void m1(){}; //抽象方法的实现,只需要加上实现体
        public void m2(){};
        public void m3(){};
    }
    
    //接口之间可以实现多继承
    interface W extends X,Y,Z{
        void m4();
    }
    
    //e类实现W接口,而W接口又继承了X,Y,Z接口,所以需要实现X,Y,Z,W的所有方法
    class e implements W{
        public void m1(){}; //抽象方法的实现,只需要加上实现体
        public void m2(){};
        public void m3(){};
        public void m4(){};
    }

    二、实例:

    1、类继承接口实现接口的方法

    2、运用多态调用接口内的方法

    package com.JavaStudy.study0515;
    
    public interface CustomeServices {
        //定义一个退出的方法
        void logOut();
    }
    package com.JavaStudy.study0515;
    
     public class CustomeServicesImpL implements CustomeServices {
        public void logOut(){
            System.out.println("退出成功!");
        }
    }
    package com.JavaStudy.study0515;
    
    public class Test {
    
        public static void main(String[] args){
            CustomeServices c = new CustomeServicesImpL(); //父类的引用指向子类的对象,多态
            c.logOut();
        }
    }

    =====执行结果=====
    退出成功!

    三、接口应用

    接口的作用:

    1、有了接口以后,项目有了分层,项目可以分小组同时开发,项目的开发效率高

    2、所有的程序都是面向接口编程的,没有面向具体,所以代码自然是解耦合的

    项目的拓展能力增强,这种特性叫做“可插拔”特性

    注意:分析接口的时候,必须分析清楚:实现方和调用方

    菜单接口Menu (规范、标准、协议、合同)

    接口实现方:Cooker

    接口调用方:Customer

    package com.JavaStudy.studyInterface0515;
    
    /**
     * @Author wufq
     * @Date 2020/5/15 16:22
     */
    public interface Menu {
        void hongshaorou();
        void oupian();
    }
    package com.JavaStudy.studyInterface0515;
    
    /**
     * @Author wufq
     * 方法的实现方
     */
    public class Cooker  implements Menu{
        public void hongshaorou(){
            System.out.println("张三喜欢红烧肉!");
        };
        public void oupian(){
            System.out.println("张三喜欢藕片!");
        };
    }
    package com.JavaStudy.studyInterface0515;
    
    /**
     * @Author wufq
     * @Date 2020/5/15 16:31
     * 需求变更:接口需要另外类加以实现
     */
    public class Cooker2 implements Menu{
        public void hongshaorou(){
            System.out.println("李四的红烧肉好了!");
        };
        public void oupian(){
            System.out.println("李四的藕片好了!");
        };
    }
    package com.JavaStudy.studyInterface0515;
    
    /**
     * @Author wufq
     * @Date 2020/5/15 16:23
     * 方法的调用方
     */
    public class Customer {
        //面向接口编程,避免面向具体编程(解耦合,增强扩展力)
        Menu m;
    
        Customer(Menu m){
            this.m = m;
        }
    
        public void diancan(){
            m.hongshaorou();
            m.oupian();
        }
    }
    package com.JavaStudy.studyInterface0515;
    
    /**
     * @Author wufq
     * @Date 2020/5/15 16:23
     * 测试方法
     */
    public class Test {
        public static void main(String[] args){
            //创建厨师
            Cooker cooker = new Cooker();
            //创建顾客
            Customer customer = new Customer(cooker);
            customer.diancan();
    
            Cooker2 cooker1 = new Cooker2();
            Customer customer1 = new Customer(cooker1);
            customer1.diancan();
    
    
        }
    }

    四、适配者模式

    当想实现一个接口但又不想实现所有接口方法,只想去实现一部分方法时,

    在接口和具体实现类中添加一个抽象类,而用抽象类去空实现目标接口的所有方法

    具体的实现类只需要覆盖其需要完成的方法即可

    package com.JavaStudy.studyInterface0515;
    
    /**
     * @Author wufq
     * @Date 2020/5/15 17:30
     */
    public interface Job {
        void speakChinese();
        void speakEnglish();
        void speakJapanese();
    }
    
    abstract class Tom implements Job{
        public void speakChinese(){};
        public void speakEnglish(){};
        public void speakJapanese(){};
    }
    
    //只想实现接口内的其中一个方法,需要用抽象类空实现接口的抽象方法
    class Jack extends Tom{
        public void speakChinese(){
            System.out.println("只想说汉语");
        }
    }
  • 相关阅读:
    HDU 2844 Coins(多重背包)
    HDU 4540 威威猫系列故事——打地鼠(DP)
    Codeforces Round #236 (Div. 2)
    FZU 2140 Forever 0.5
    HDU 1171 Big Event in HDU(DP)
    HDU 1160 FatMouse's Speed(DP)
    ZOJ 3490 String Successor
    ZOJ 3609 Modular Inverse
    ZOJ 3603 Draw Something Cheat
    ZOJ 3705 Applications
  • 原文地址:https://www.cnblogs.com/frankruby/p/12869509.html
Copyright © 2011-2022 走看看