Java基础学习之接口

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

Java基础篇:接口

介绍

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

graph LR;
接口---静态常量
接口---抽象方法
接口---默认方法
接口---静态方法

使用

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

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

代码实现:

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方法的话,就会编译报错

新特性::默认方法

以前的接口向后兼容性不好, 例如我想在动物类中增加一个如何食用该动物, 那么总不能每个动物都要实现吧, 所以就需要这种可以不实现这个方法

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

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

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

}  

上述代码编译出错, 如下:

错误信息

这个时候我们就要重写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新特性, 可以在接口中定义静态方法与默认方法
相关文章
|
2月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
315 0
|
2月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
314 7
|
2月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
233 1
|
2月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
232 0
|
3月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
162 11
|
3月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
84 5
|
3月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
165 1
|
3月前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
156 5
|
3月前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
187 3
|
3月前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
97 1