java接口(超简单理解)

接口

今天是个阳光明媚的一天,打电话给小鱼跟他传授一下 java中的interface 接口。
小马:滴滴滴… 小鱼在干嘛?抽象学的怎么样了?
小鱼:抽象学的挺好的,但是我刚刚在想,为什么 List 能够 new 出 Arraylist 或者new出LinkList ?
小马;挺巧的呀,刚好今天我也准备给你说一下这个知识,这种叫做接口
小鱼:真的嘛,那你快讲一下接口吧。
小马:好好好看你急的。
首先我们需要知道,什么是接口?
Java中接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,所以这些方法可以在不同地方被不同类实现
而这些类拥有不同的功能。
有三点需要注意的是:

1.接口继承和实现继承的规则不同,一个类只有一个直接父类,但是可以实现多个接口
2.Java接口本身没有任何实现,因为Java接口不涉及表象,只描述public行为,所以Java接口比Java抽象类 更抽象化
3.Java接口的方法只能是抽象的公开的(默认就是抽象公开的),Java接口不能有构造器,Java接口可以有
public静态和final属性

注:接口把方法的特征和方法的实现分割开,这种分割体现在 接口往往扮演一个角色,它包括该角色拥有的操 >作和属性,而实现这个接口的类则是扮演该角色的演员,一个角色有多个演员演义,而不同的角色除了扮演同一>个角色之外并不要求其他共同之处。

小马:小鱼懂了吗?
小鱼:懂了点,但是为什么要用接口呢?抽象完成的功能我觉得他们差不多啊。
小马:ummmm,我先给你说一下为什么使用接口,等你听完估计也懂得差不多了。

那么我们为什么使用接口呢?
两个类中有类似的功能,调用他们的类动态决定一种实现,就提供一个抽象抽象父类,子类分别实现父类所定义的方法。

我们来了解一个问题。我们想给一个类加上一个父类,但是Java是一种单继承的语言,一般情况下某个具体类可能已经有了超类,那只能给他的父类加父类,或者他的父类也有,那只能再给他的父类的父类的加继承,这样的话只能加到最顶端,那么造成的影响就是,我只想给某个具体类加父类,结果成为了顶端父类,不管是从设计方面,还是代码重用方面来看的话这种都是不可以的。那么接口的多实现就可以完美的解决该问题。

在一个结构中 任何一个类都可以实现接口,这个接口会影响到该类以及他的所有子类,但是不会影响到该类的父类,此类必须实现该接口的所规定的方法,而子类可以从其子类自动继承这些方法。

接口提供的关联以及方法调用上的可插入性,软件系统规模越大,生命周期越长,接口使得软件系统的灵活性和可扩展性,可插入性方面得到保证。

在良好的编码习惯中,一个具体的java类只应当实现java接口和抽象java接口中声明的方法,而不应当给多余的方法。

小马:现在用代码给你示范一下,接口的基础使用。
小鱼:好

我们来模仿一个走路的行为作为接口,使用两个类 魏无羡和蓝忘机作为接口实现


    /**
     * 接口定义 和 普通类定义区别就是 使用 interface修饰
     */
    interface BaseInterfaces {
        /**
         * 接口中方法默认 是 public abstract修饰的,通常可以省略
         */
//      public abstract void run();
        void run();
    }


    /**
     * 定义类来 使用 implements来实现一个接口
     */
    static class WeiWuXian implements BaseInterfaces{

        // @Override 显式的标记重写方法
        @Override
        public void run() {
            System.out.println("魏无羡向蓝忘机走去....");
        }
    }

    static class  LanWangJi implements BaseInterfaces{
        // @Override 显式的标记重写方法
        @Override
        public void run() {
            System.out.println("蓝忘机向魏无羡走去....");
        }
    }

    public static void main(String[] args){
        // 使用java的多态机制 采用接口 指向实现类的方法实例化
        BaseInterfaces lwj = new LanWangJi();
        BaseInterfaces wwx = new WeiWuXian();
        lwj.run();
        wwx.run();
    }

输出结果
蓝忘机向魏无羡走去…
魏无羡向蓝忘机走去…

从上可以看到 定义接口是采用 interface关键词,而不是使用class 这里需要注意。
而实现一个接口 采用 implements关键词来实现,于继承不同的是,可以采用逗号‘,‘分割符来定义多个实现的接口。
不过需要注意的是 接口的方法是默认 抽象并公开的,通常我们在编程中可以省略掉。
在使用的时候 采用Java多态机制 接口指向实现类 来进行实例化。可以看到,使用同一个接口 来指向了 两个不同的类,输出不同的结果。
我们来写一下接口的多实现机制

定义前景,走过去之后是不是需要干点啥,不然走过去发呆???
这样吧,魏无羡走过去之后打了声招呼你好啊,蓝忘机也是同样回应了招呼。

	/**
     * 接口定义 和 普通类定义区别就是 使用 interface修饰
     */
    interface BaseInterfaces {
        /**
         * 接口中方法默认 是 public abstract修饰的,通常可以省略
         */
//        public abstract void run();
        void run();
    }

    interface GreetInterface{
        /**
         * 定义打招呼方法
         */
        void greet();
    }


    /**
     * 定义类来 使用 implements来实现一个接口
     */
    static class WeiWuXian implements BaseInterfaces,GreetInterface{

        // @Override 显式的标记重写方法
        @Override
        public void run() {
            System.out.println("魏无羡向蓝忘机走去....");
        }

        @Override
        public void greet() {
            System.out.println("魏无羡向蓝忘机打了招呼....");
        }
    }

    static class  LanWangJi implements BaseInterfaces,GreetInterface{
        // @Override 显式的标记重写方法
        @Override
        public void run() {
            System.out.println("蓝忘机向魏无羡走去....");
        }

        @Override
        public void greet() {
            System.out.println("蓝忘机向魏无羡打了招呼....");
        }
    }

    public static void main(String[] args){
        // 使用java的多态机制 采用接口 指向实现类的方法实例化
        BaseInterfaces lwj = new LanWangJi();
        BaseInterfaces wwx = new WeiWuXian();
        lwj.run();
        wwx.run();
        GreetInterface lwjdzh = new LanWangJi();
        GreetInterface wwxdzh = new WeiWuXian();
        lwjdzh.greet();
        wwxdzh.greet();
    }

输出结果:
蓝忘机向魏无羡走去…
魏无羡向蓝忘机走去…
蓝忘机向魏无羡打了招呼…
魏无羡向蓝忘机打了招呼…

从上可以看到,采用接口多实现该类拥有了两个接口的行为,只需要用’,'来分割各个接口。
小马:小鱼明白了嘛。
小鱼:知道了。我总结出接口的几个大概

1.接口是Java中一大特性和一大支柱性的优点。
2.接口用来个别具体类的实现,会自动继承接口中的抽象方法给这类继承他的类。
3.接口解耦性非常棒,一个优秀的系统,耦合性越低越好
4.接口中的方法一定都会被继承他的类实现,如果少继承了或者没有继承会报错。
5.接口在Java中拥有多继承的意义,因为c++里有多继承,而Java为了完整的面对对象就拒绝了多继承,使用接口。

小马:还有几点忘记了,我跟你说说:

1.接口用实现类实现其方法,便于无损替换,维护很方便
这里打个比方例如 你采用List list = new ArrayList(); 有一天觉得ArrayList线程安全问题困扰了你,需要换成LinkedList ,这时候只需要更换指向就可以了。(来自刘勇胜老师指导)。

小鱼:明白了,谢谢小马。
小马:嗯嗯,那你回去好好消化一下吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值