Java

[Java]重学Java-接口

2021-08-20  本文已影响0人  AbstractCulture

接口是什么

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

修饰符

接口中的方法自动属于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 或友元
上一篇 下一篇

猜你喜欢

热点阅读