美文网首页Java
[Java]重学Java-接口

[Java]重学Java-接口

作者: AbstractCulture | 来源:发表于2021-08-20 18:45 被阅读0次

    接口是什么

    首先接口不是类,它本身是无法被实例化的,只有实现类可以被实例化。它更像是一种功能的描述,程序输入什么值,返回什么值,其本身更多是抽象的功能性表达。

    修饰符

    接口中的方法自动属于public,如果实现了接口,那么必须覆写其所有的方法定义。
    注意,实现类中需要显性声明实现的方法为public.
    在java8中,提供了default关键字,它允许接口也可以拥有自己的方法体,并且要求其不是必须被实现的,这使得接口也可以具备一定的职能了。具体的例子可以查看java.util.function.Predicate.

    属性

    接口可以定义属性,他们被指定为staticfinal.

    public interface IBank {
        String EXAMPLE = "我是一个例子,说明接口是可以定义属性的";
        /**
         * 办理信用卡
         */
        void applyCreditCard();
    }
    

    多实现

    java类不支持多继承,但是对于一个类来说,它可以实现多个接口.

    • 证券接口
    package com.tea.modules.java8.oop.polymorphism;
    
    /**
     * com.tea.modules.java8.oop.polymorphism <br>
     * 证券接口
     * @author jaymin
     * @since 2021/8/20
     */
    public interface Securities {
        /**
         * 开通证券账户
         */
        void openSecurities();
    }
    
    • 银行接口
    package com.tea.modules.java8.oop.polymorphism;
    
    /**
     * com.tea.modules.java8.oop.polymorphism <br>
     * 银行接口
     * @author jaymin
     * @since 2021/7/1
     */
    public interface IBank {
        /**
         * 办理信用卡
         */
        void applyCreditCard();
    }
    
    • 实现类实现多接口
    package com.tea.modules.java8.oop.polymorphism;
    
    /**
     * com.tea.modules.java8.oop.polymorphism <br>
     * 中国银行
     *
     * @author jaymin
     * @since 2021/7/1
     */
    public class ChineseBank implements IBank,Securities {
        @Override
        public void applyCreditCard() {
            System.out.println("办理信用卡送行李箱");
        }
    
        @Override
        public void openSecurities() {
            System.out.println("开通证券账户");
        }
    }
    

    可以看到,ChineseBank实现了IBank,Securities接口,在需要用到IBank和Securities的地方,我们就可以注入ChineseBank作为实例进行操作了。

    扩展接口

    如果定义了很多独立的接口,你希望通过一个新的接口来统一这些接口,那么你可以使用interface+extends关键字来完成这件事.

    public interface Securities extends IBank {
        /**
         * 开通证券账户
         */
        void openSecurities();
    
        /**
         * 提醒散户跑路
         */
        static void prompt(){
            System.out.println("崩盘了,速度清仓!!!");
        }
    }
    

    实现了Securities的类也必须实现IBank的方法声明,你可以在JDK的源码中看到很多这样的案例.

    image.png

    静态方法

    package com.tea.modules.java8.oop.polymorphism;
    
    /**
     * com.tea.modules.java8.oop.polymorphism <br>
     * 证券接口
     * @author jaymin
     * @since 2021/8/20
     */
    public interface Securities {
        /**
         * 开通证券账户
         */
        void openSecurities();
    
        /**
         * 提醒散户跑路
         */
        static void prompt(){
            System.out.println("崩盘了,速度清仓!!!");
        }
    }
    

    通过Securities.prompt可以完成静态方法调用.

    接口与抽象类

    特性 接口 抽象类
    组合 新类可以组合多个接口 只能继承单一抽象类
    状态 不能包含属性(除了静态属性,不支持对象状态) 可以包含属性,非抽象方法可能引用这些属性
    默认方法 和 抽象方法 不需要在子类中实现默认方法。默认方法可以引用其他接口的方法 必须在子类中实现抽象方法
    构造器 没有构造器 可以有构造器
    可见性 隐式 public 可以是 protected 或友元

    相关文章

      网友评论

        本文标题:[Java]重学Java-接口

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