Java基础篇:接口

Java基础篇:接口

介绍

Java 中的 接口 定义为用于指定实现类行为的抽象类型,Java接口包含 静态常量抽象方法 , 1.8以后还有 默认方法静态方法 。一个类能够实现多个接口。
在Java中,接口是使用 interface 关键字声明的。在 JDK8 以前接口中的全部方法都是 隐式公开抽象 的, 1.8版本以后能够在接口中定义静态方法与使用 default 声明的带 方法体 的方法。java

  • 静态常量
  • 抽象方法
  • 默认方法
  • 静态方法

使用

抽取一系列对象的公共特征, 声明方法后进行统一实现, 例如猫和老鼠都是动物, 均可以爬或者叫等等, 这个时候咱们定义一个动物接口, 声明爬行和叫声的公共抽象方法, 建立猫和老鼠的类进行实现动物接口 markdown

优势: 当增长一个公共抽象方法, 例如在动物接口中增长 毛色 方法, 这样咱们不用去用脑去记忆有多少动物实现了它, 由于编译的时候会报错误, 很清晰的给动物实现类增长方法, 而无需去担忧漏掉某个动物没有毛色 ide

代码实现: code

interface Animal {
    public void move();
}

class Cat implements Animal {
    public void move(){
        System.out.println("猫行走的方法...");
    }    
}

class Dog implements Animal {
    public void move(){
        System.out.println("狗行走的方法...");
    }    
}

给动物增长一个毛色 对象

interface Animal {
    // ...其余方法
    public void color();
}

这个时候若是CatDog类若是不重写color方法的话,就会编译报错 blog

新特性::默认方法

之前的接口向后兼容性很差, 例如我想在动物类中增长一个如何食用该动物, 那么总不能每一个动物都要实现吧, 因此就须要这种能够不实现这个方法接口

interface Animal {
    default void howToEat(){
        System.out.println("Animal:实现了这个接口的类能够不实现这个方法");
    }
}

那么问题来了, 假若有一个兔子类, 在实现了Animal的同时又实现了Mammal(哺乳动物), 而两个接口中都包含howToEat方法 get

interface Mammal {
    default void howToEat(){
        // 实现了这个接口的类能够不实现这个方法
        System.out.println("Mammal:哺乳动物食用方法...");
    }
}
public class Rabbit implements Animal, Mammal{

}

上述代码编译出错, 以下: it

错误信息

这个时候咱们就要重写howToEat方法了 编译

public class Rabbit implements Animal, Mammal {
    @Override
    public void howToEat() {
        System.out.println("麻辣兔头");
    }
}

新特性::静态方法

假如我想获取哺乳动物的腿的数量, 我又不想去调取其实现类, 或者每一个实现类写其有几条腿或者爪子什么之类的

public interface Mammal {
    static int getLegByName(String name) {
        switch (name) {
            case "兔子":
                return 4;
            case "鸭子":
                return 2;
            default:
                return 0;
        }
    }
}

总结

  • 接口固定了实现类对指定方法的实现特征
  • jdk8新特性, 能够在接口中定义静态方法与默认方法
相关文章
相关标签/搜索