Java学习之路——接口

概述

总所周知,我们是父母的孩子。我们的身上既继承了爸爸的基因也继承了妈妈的基因。这就是多继承。

然而在 Java 程序中,是不支持多继承的。Java 仅仅支持单继承。但是接口为我们提供了一种实现多继承的可能性!

接口(英文:Interface):在JAVA编程语言中接口是一个抽象类型,是抽象方法的集合,接口通常以 interface 来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

我们要明确,**接口并不是类!接口和类是并列的结构!**只是编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

一、接口的定义及实现

JDK7以前,接口中只能定义全局常量和抽象方法;JDK8后,接口中除了可以定义全局常量和抽象方法之外,还可以定义静态方法,默认方法等。

实现接口的类必须实现接口所有的抽象方法,而静态方法,默认方法等不需要实现。接口中的静态方法,默认方法等只能通过接口调用。

// 定义一个接口
interface Flyable {// 全局常量// 两种方式效果相同,一般书写时省略前面的 public static finalpublic static final int MAX_SPEED = 7900;int MIN_SPEED = 0;// 抽象方法// 两种方式效果相同,一般书写时省略前面的 public abstractpublic abstract void fly();void stop();
}class Bird implements Flyable {@Overridepublic void fly() {System.out.println("I can fly.");}@Overridepublic void stop() {}
}

二、接口的继承

一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。

实现的类必须实现所有的接口(包括接口继承的接口)才能进行实例化。

单继承

// 定义一个接口
interface Flyable {public abstract void fly();void stop();
}// 继承一个接口
interface Bird extends Flyable {void eatBug();
}// 实现接口
class Sparrow implements Bird {@Overridepublic void fly() {}@Overridepublic void stop() {}@Overridepublic void eatBug() {}
}

多继承

在Java中,类的多继承是不合法,但接口允许多继承。在接口的多继承中 extends 关键字只需要使用一次,在其后跟着继承接口即可实现多继承。

通过接口的多继承,即可实现类的多继承。

// 定义一个接口
interface Flyable {void fly();
}interface Reproduction {void breedingOffspring();
}// 继承一个接口
interface Bird extends Flyable, Reproduction {void eatBug();
}// 实现接口
class Sparrow implements Bird {@Overridepublic void fly() {}@Overridepublic void eatBug() {}@Overridepublic void breedingOffspring() {}
}

三、标记接口

标记接口有时也叫标签接口(Tag interface),即接口不包含任何方法。

在Java里很容易找到标记接口的例子,比如 JDK 里的 Serializable 接口就是一个标记接口。

标记接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。

标记接口作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。

public interface Flyable {}

四、接口与类的比较

  • 接口不能用于实例化对象,对象可以;
  • 接口没有构造方法,类有构造方法
  • 接口中所有的方法必须是抽象方法,类中所有方法都不能是抽象方法;
  • 接口不能包含成员变量,除了 static 和 final 变量,类中可以有成员变量;
  • 接口不是被类继承了,而是要被类实现;
  • 接口支持多继承,类只支持单继承。

五、接口默认方法冲突

如果先在一个接口中将一个方法定义为默认方法,然后又在超类或另一个接口中定义了同样的方法,就会产生一个二义性错误。

对于解决这个问题,Java 如下规则.

  1. **超类优先:**如果超类提供了一个具体方法,同名并且有相同参数的默认方法会被忽略;
  2. **接口冲突:**如果一个接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型相同的方法。则实现类必须覆盖这个方法来解决冲突。

Java学习之路——接口相关推荐

  1. java学习之路目录(已完结)

    java学习之路目录(持续更新中-) 第一阶段 javaSE(完结) 序号 标题 内容 001 java初识 java语言特点.体系结构.运行机制 002 java SE基础语法 注释.关键字.变量. ...

  2. java学习之路2--简单工厂模式实现饮料自动贩卖机

    java学习之路2 用简单工厂模式实现饮料自动贩卖机 功能简介 具体实现 1.简单工厂模式 2.代码 总结 用简单工厂模式实现饮料自动贩卖机) 功能简介 接收用户输入的信息,选择购买的饮料. 可供选择 ...

  3. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解) * A:什么是计算机?计算机在生活中的应 ...

  4. 个人开发经历--我的java学习之路(学校篇)

    个人开发经历--我的java学习之路(学校篇) 个人介绍: 姓名: 不在这里说明 联系信息: 个人历程 jdbc阶段 sql生成器 一代代码生成器 servlet阶段 servlet项目中,sql生成 ...

  5. 萌新的java学习之路——第一周

    萌新的java学习之路--第一周 第一周的学习 这是我学习Java的第一周,写这个博客更多的时为了总结自己这一周的学习情况,如果有人看到我写的博客,有什么问题的话,可以问我.虽然我也是一个小白,但我会 ...

  6. 我的Java学习之路2009-11-17

    -------------------------------2009年3月19日开始----------------------------- 下载JDK Myeclipse Netbeans JB ...

  7. JAVA学习之路:不走弯路,就是捷径(一)

      0.引言 在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于"如何学习编程?JAVA该如何学习?".类似的问题回答多了,难免会感觉厌烦,就萌生了写下本文的想法.到 ...

  8. Java学习之路1——安装JDK1.8||安装idea2022||Java项目创建【重拾Java】

    Java学习之路1--安装JDK1.8||安装idea2022[重拾Java] 前言 安装 安装JDK1.8 安装idea2022(JetBrains Toolbox) Java项目创建 创建 项目结 ...

  9. 菜鸟haqima的Java学习之路第一天

    菜鸟haqima的Java学习之路第一天 导读:DOS命令 常用快捷键 Java的简单概述 (第一章 Java开发环境的搭建) 1.常用的DOS命令 1.1.怎么打开DOS命令窗口 win键+r(组合 ...

最新文章

  1. CentOS 6.7 FTP安装配置之pure-ftpd
  2. dbus的代码范例 linux_linux-将结构传递给dbus方法的工具?
  3. 要是不会用数据,算什么IT产品经理?
  4. R语言学习 - 图形设置中英字体
  5. java正则表达式 ascii_Java——正则表达式
  6. 字符串,数组,定时器,form
  7. oracle 修改字段类型方法
  8. solrcloud 7.5在k8s上的部署安装和使用教程
  9. java中容器如何维护其内容
  10. c语言从入门到精通 PPT,C语言从入门到精通第1章讲述.ppt
  11. 谷歌服务框架_谷歌服务框架下载_谷歌服务框架全版本整理
  12. 华为IE和思科IE哪个好?
  13. MySQL学习笔记(6)
  14. 欧拉降幂公式(扩展欧拉定理)证明
  15. WIN10输入法改为WIN7习惯,默认输入英文,程序员专用
  16. 生物信息学计算机等级,生物信息学考试题.doc
  17. 【地图导航】3D地图软件是如何做路径规划的?为什么准确率这么高
  18. python猜字游戏猜三次_python 猜字游戏
  19. 中职计算机对数学知识的要求,中职计算机专业的数学教学研究
  20. 大数据平台架构的层次划分

热门文章

  1. 超出文本部分用省略号表示
  2. 微型计算机的常规内存是指,PC机性能指标中的内存容量一般指的是是什么啊?
  3. 如何查看本机Mac地址
  4. 小米米家打印机,打印状态提示出错无法正常打印,怎么办?
  5. ffmpeg实现视频实时动态时间水印
  6. 计算机科学终审多长时间,一些计算机科学核心期刊的投稿经验
  7. 联想电脑拯救者y7000触摸屏失灵的修复方法
  8. VSCode配置 for Mac(一)C++
  9. 在国外怎么观看国内网站视频电影电视剧
  10. [zz]64bitnbsp;ubuntunbsp;安装32bit软件