美文网首页
JJJJJava接口

JJJJJava接口

作者: 南在南方i | 来源:发表于2019-08-13 19:56 被阅读0次

    接口 interface

    Java接口是一系列方法的声明,是一些方法特征的集合
    一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为

    接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法

    特点

    就像一个类一样,一个接口也能够拥有方法和属性,但是在接口中声明的方法默认是抽象的(即只有方法标识符,而没有方法体)

    • 接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图
    • 一个接口就是描述一种能力,比如“运动员”也可以作为一个接口,并且任何实现“运动员”接口的类都必须有能力实现奔跑这个动作(或者implement move()方法),所以接口的作用就是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力
    • 如果一个类实现了一个接口中要求的所有的方法,然而没有提供方法体而仅仅只有方法标识,那么这个类一定是一个抽象类(必须记住:抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法。接口是百分之百的抽象类

    为什么使用接口

    • 接口被用来描述一种抽象
    • 接口也被用来实现解耦
    • 接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是final,public,static的

    接口的用法实现

    • 接口的定义 interface
      interface Computers
    • 接口的实现 implements
      class Add implements Computers{}

    实例

    /**
     * 利用接口做参数,写个计算器,能完成加减乘除运算。
     * (1)定义一个接口Compute含有一个方法int computer(int n, int m)。
     * (2)设计四个类分别实现此接口,完成加减乘除运算。
     * (3)设计一个类UseCompute,类中含有方法:public void useCom(Compute com, int one, int two),
     *      此方法能够用传递过来的对象调用computer方法完成运算,并输出运算的结果。
     * (4)设计一个主类Test,调用UseCompute中的方法useCom来完成加减乘除运算。
     *
     */
    public class Test2 {
        public static void main(String[] args){
            UseComper useComper = new UseComper();
            useComper.useCom(new Add(),12,6);
            useComper.useCom(new Sub(),12,6);
            useComper.useCom(new Mul(),12,6);
            useComper.useCom(new Div(),12,6);
        }
    }
    
    interface Computers{
        int computers(int n,int m);
    }
    
    class Add implements Computers{
        @Override
        public int computers(int n, int m) {
            System.out.println("Add:" + (n + m));
            return 0;
        }
    }
    
    class Sub implements Computers{
        @Override
        public int computers(int n, int m) {
            System.out.println("Sub:"+(n-m));
            return 0;
        }
    }
    
    class Mul implements Computers{
        @Override
        public int computers(int n, int m) {
            System.out.println("Mul:"+(n*m));
            return 0;
        }
    }
    
    class Div implements Computers{
        @Override
        public int computers(int n, int m) {
            System.out.println("Div:"+(n/m));
            return 0;
        }
    }
    
    class UseComper{
        public void useCom(Computers com, int number1, int number2){
            int result = com.computers(number1,number2);
            System.out.println(result);
        }
    }
    

    重点

    • 我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的,这样怎么可能产生具体的实例呢?我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法
    • 一个类可以实现不止一个接口
    • 一个接口可以继承于另一个接口,或者另一些接口,接口也可以继承,并且可以多继承
    • 一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法
    • 接口中所有的方法都是抽象的和public的,所有的属性都是public,static,final的

    接口的通俗理解(借鉴)

    前面我们讲多态的时候用“空调”——“遥控器”的方式去理解多态,实际上在上面的的几个重点中的第一条讲的也是多态的实现,比如,我们可以把“节能”作为一种标准,或者说节能就是一个“接口”,这个接口中有一个方法,叫做变频方法,任何空调,如果要称得上叫做节能空调的话,那么必须实现“节能”这个接口,实现“节能”这个接口,也就必须实现“节能”接口中规定实现的“变频”方法,这样才算是真正的实现了“节能”这个接口,实现了“节能”这个功能。
    当某个空调实现了“节能”接口后,这个空调就具备了节能的功能,那么我们也可以不用空调类的引用指向空调对象,我们可以直接使用一个“节能”接口类型引用的“遥控器”去指向“空调”,虽然这个“遥控器”上面只有一个按键,只有一个“变频”的方法,但是“遥控器”所指向的空调是实现了“节能”这个接口的,是有“变频”方法的实现的,我们用这个只有一个“变频”方法的遥控器去命令空调调用“变频”方法,也是行得通的


    PS.

    渐渐摆脱最开始的迷茫,寻找到适合自己的学习方式,将一个个小的知识点进行拆分后实际运用并在熟悉后相融合

    相关文章

      网友评论

          本文标题:JJJJJava接口

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