Java基础学习之接口-阿里云开发者社区

开发者社区> 1146941742467410> 正文

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新特性, 可以在接口中定义静态方法与默认方法

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

作者高分内容
更多
Linux 安装 Maven 119
相关文章
你不可错过的Java学习资源清单
学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难。基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单。 Java入门学习资源 这里主要推荐的是几个技术学习网站,基本上都是视频学习资源。
1490 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
8467 0
远程接口对接|学习笔记
快速学习远程接口对接
11 0
机器学习基础
郑捷《机器学习算法原理与编程实践》学习笔记(第一章 机器学习基础) 机器学习对象是指含有一组特征的行向量,也称为特征向量。 一般而言,一个对象应视为完整的个体,代表现实中有意义的事物,不能轻易拆分。
832 0
Java学习--Ajax与数据库连接池
Java学习--Ajax与数据库连接池 概述 数据库连接池 Ajax简介 JavaScript实现Ajax jQuery实现Ajax 一:数据库连接池 数据库连接是一种关键的有限的昂贵的资源,对数据库连接的管理能显著影响到整个应用程序的性能。
1605 0
Android基础学习
1、specify :指定 2、Nested:嵌套 3、启动模拟器时出现错误信息“Please ensure that adb is correctly located at:XXXXX”的解决方法 现象:使用正确的源代码,在启动模拟器时出现如下错误信息 ...
773 0
3
文章
0
问答
作者高分内容
更多
Linux 安装 Maven 119
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载