美文网首页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-接口

    接口是什么 首先接口不是类,它本身是无法被实例化的,只有实现类可以被实例化。它更像是一种功能的描述,程序输入什么值...

  • JAVA-线程-一-执行器Executor

    2. JAVA-线程-二-ExecutorService 接口 3. JAVA-线程-三-AbstractExec...

  • JAVA-线程-三-AbstractExecutorServic

    1. JAVA-线程-一-执行器Executor 2. JAVA-线程-二-ExecutorService 接口 ...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • [Java]重学Java-继承

    复用 随着码代码的时间增长,程序员会越发需要"复用"这个能力,比如最简单的对String类进行判空: 我们需要每次...

  • [Java]重学Java-集合

    容器 很多时候,我们写程序需要进行批量的操作,比如说,新增一批学生列表.那么就需要有容器来装下这10个对象。Jav...

  • [Java]重学Java-多态

    从一个例子理解多态 对于一个不同特征的对象,使用接口可以隐藏子类的行为,对外暴露同一个接口,从而实现编程的解耦. ...

  • Java-接口

    基本概念 接口(Interface),在Java编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interf...

  • Java-接口

    1. 抽象类和抽象方法 建立通用接口的目的是:使子类继承从而不同的子类可以用不同的方式表示此接口。通用接口建立起一...

  • [Java]重学Java-可变参数

    可以变动的参数数量 编程离不开写方法(函数),Java中的大多数方法都是固定数量的参数,JDK5提供了可变参数来让...

网友评论

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

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