Java语言只支持单重继承,不支持多继承,即一个类只能有一个父类。但是在实际应用中,又经常需要使用多继承来解决问题。为了解决该问题,Java语言提供接口来实现类的多继承问题。

  接口(英文interface),,在Java 编程语言中是一个抽象类型,是抽象方法的集合,接口通常以 interface 来声明,一个类通过继承接口的方式,,从未来继承接口的抽象方法。接口并不是类,创建接口的方式和类很相似,但是他们属于不同的概念,类描述对象的属性和方法,接口则包含要实现的方法。除非实现接口的类是抽象类,否则该实现类要重写接口中所有方法。接口无法被实例化,但可以被实现,一个实现接口的类,必须实现接口内描述的所有方法。否则就必须声明为抽象类。另外,在Java中,接口类型可以用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象

1.接口的定义

  使用interface来定义一个接口。接口定义与类的定义相似,也是分为接口的声明和接口体,其中接口体由变量定义和方法定义两部分组成。定义接口的基本语法格式如下:

  [修饰符]interface  接口名  [extends  父接口名列表]{  

      [public] [static] [final]  变量;        

      [public] [abstract]   方法;                   

    }

参数 说明
   修饰符 可选参数,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限
   接口 必选参数,用于指定接口的名称,接口名必须是合法的Java标识符,一般情况下,要求首字母大写
   extends父接口名列表 可选参数,用于指定要定义的接口继承于哪个接口。当使用extends关键字时,父接口名为必选参数
 方法     接口中的方法只有定义而没有实现

定义一个用于计算的接口,在该接口中定义一个常量PI 和两个方法。

public interface CalculateInface {
  public static final double PI = 3.14159; //定义用于表示圆周率的常量PI

  public double getCircumference(double r); //定义一个用于计算周长的方法

  public double getArea(double r); //定义一个用于计算面积的方法
}

注意: 与Java 类文件一样,接口文件的文件名必须与接口名相同。

2.接口的实现

接口在定义后,就可以在类中实现该接口。在类中实现接口可以使用 implements 关键字,基本语法格式如下:

  [修饰符] class <类名>  [extends  父类名] implements  接口列表{

  }  

实现接口的语法格式的参数说明:

参数 说明
   修饰符   可选参数,用于指定类的访问权限,可选值为public、abstract 和 final
   类名   必选参数,用于指定类的名称,类名必须是合法的Java标识符,一般情况下,要求首字母大写
   extends父类名列表   可选参数,用于指定要定义的类继承于哪个父类。当使用extends关键字时,父类名为必选参数
 implements接口列表   当接口列表中存在多个接口名时,各个接口之间是用逗号分隔

  在类中实现接口时,方法名、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。

  编写一个Circle的类,实现上文定义的接口 CalculateInface 。

public class Circle implements CalculateInface{

  public double getCircumference(double r) {
  double circumference = 2*PI*r ; //计算圆周长并返回
  return circumference;
  }

  public double getArea(double r) { //计算圆的面积并返回
  double area = PI*r*r ;
  return area;
  }
}

  在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔,这是就可能出现变量或方法冲突的情况。解决该问题时,如果变量冲突,则需要明确指定变量的接口,可以通过“接口名.变量”实现。如果出现方法冲突,则只要实现一个方法即可。

接口与类相似点:

  • 一个接口可以有多个方法。
  • 接口文件保存在以.java 结尾的文件中。
  • 接口的字节码文件保存在以.class 结尾的文件中。
  • 接口相应的字节码文件必须在与包名称相匹配的目录中。

接口与类的区别:

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中的方法必须全是抽象方法。
  • 接口不能包含成员变量,除了static 和 final 变量。
  • 接口不是被类 继承,而是要被类 实现。
  • 接口支持多继承(包括被类或接口)。

接口的特性 :

  • 接口中每一个方法都是隐式抽象的,接口中的方法会被隐式指定为 public  abstract(只能是 public  abstract,其他的修饰符都会报错)。
  • 接口中可以含有变量,但是变两个会被隐式的指定为public  static final 变量(并且只能是 public,若用private  会编译报错的)。
  • 接口中的方法是不能在接口中实现的,只能由实现的接口的类来实现接口中的方法

转载于:https://www.cnblogs.com/sdlzspl/p/7216872.html

Java学习之接口概念相关推荐

  1. 零基础Java学习之接口

    介绍 接口的介绍我们从三个方面来说: 从使用上来说是继承的一种扩展,因为java不支持多继承,而有了接口就能够实现多继承的效果. 有时候需要必须从几个类中抽取出一些共同的行为特征,而它们之间又没有继承 ...

  2. Java学习笔记---接口

    接口和内部类为我们提供了一种接口与实现分离的更加结构化的方法: 首先需要学习抽象类,它是普通的类与接口之间的一种中庸之道:因为不可能总是使用纯接口,所以抽象类仍旧有着重要的作用. 抽象类和抽象方法 接 ...

  3. (JAVA学习笔记) 接口

    定义: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口就是规范,定 ...

  4. java学习日记-接口

    回顾: abstract 修饰方法 抽象方法 没有方法体 必须定义在抽象类中 修饰类 抽象类 可以定义抽象方法 普通类中可以定义的一切,在抽象类中都可以定义 属性 构造方法 实例方法 不能实例化 子类 ...

  5. Java学习笔记—接口

    一个接口表示:所有实现了该特定接口的类看起来都像这样,接口被用来建立类与类之间的协议.同时接口中也可以包含域,但是这些域隐式的是static和final. 转载于:https://www.cnblog ...

  6. Java学习1-基本概念

    Java三大版本的含义 JavaSE(Java standard Edition):保准版,定位在个人计算机上的应用,这个版本是Java平台的核心,提供了丰富的API来开发一般个人计算机上的应用. J ...

  7. 学习 Java 8 - 函数式接口 Lambda

    学习 Java 8 - 函数式接口 Java 8 引入了函数式接口的概念.函数式接口其实就是只包含一个抽象方法的普通 Java 接口.在没有引入函数式接口之前,我们通常使用内部类和匿名类来实现类似的功 ...

  8. typescript 接口 java_[Java教程]【TypeScript】TypeScript 学习 2——接口

    [Java教程][TypeScript]TypeScript 学习 2--接口 0 2015-06-19 12:00:28 在 TypeScript 中,接口是用作约束作用的,在编译成 JavaScr ...

  9. 【java学习之路】(java SE篇)(讨论与思考)关于继承,封装,多态,接口的简单实现与思考

    题目一 编写一个Person抽象类,要求含有姓名(name)年龄(age)两个私有属性以及吃饭(eat) 和睡觉(sleep)两个抽象方法, 并写出带参构造方法,创建学生(student)和工人(wo ...

最新文章

  1. 【模型评估与选择】sklearn.model_selection.KFold
  2. c++用一级运算比较大小_阿里百度腾讯 C/C++ 面试题总结,我全都告诉你!
  3. zabbix2.2安装配置(1)
  4. Docker,Docker-Compose,Docker Swarm,Kubernetes之间的区别
  5. ABP文档 - Mvc 视图
  6. element-ui中table表格表头和表格内容都水平居中
  7. 串口调试工具(Python2.7+pyserial+Tkinter)
  8. linux终端黑客帝国代码雨效果
  9. 小米miui全机型代码对照与各机型发布时间表 了解小米机型发展历程
  10. ARCGIS---栅格影像矢量化(含二级化/二值化、栅格清理)
  11. 【亲测好用】磁盘管理器:Disk Xray Mac版
  12. springboot整合log4j2报错Unexpected filename extension of file[file__E__classes_log4j2.yml].Should be .xm
  13. Excel如何对单元格内的分隔数据进行求和操作?
  14. 最佳实践 | 如何提高落地页的转化率?这里有4个策略
  15. unity碰撞检测识别对象的几种方法,刚体篇
  16. 五层协议体系结构的各层功能
  17. DEFERRED_SEGMENT_CREATION参数
  18. edius制作视频音画不同步原因
  19. matlab能进行气固耦合计算吗,谈谈流固耦合计算
  20. python动态爱心曲线_用Python来画一条动态心形曲线

热门文章

  1. 数据结构与算法学习笔记02-单向链表
  2. 如何在shell中执行 字符串拼接起来的命令 cmd = ls / 执行方法:$cmd
  3. NB贝叶斯平凡而又神奇的贝叶斯方法
  4. 使用ByteArray及AMF来提高Data Object的操作效率
  5. win8计算机用户名在哪里设置,windows8系统用户名微软ID和管理员账户概念详解
  6. 大学计算机张青答案,《大学计算机Ⅰ》实验报告实验一1
  7. 线性回归与梯度下降算法
  8. 抠图为什么要用绿布_逆天抠图,Photoshop 2020天神下凡
  9. java命令行参数_一个 java 命令行参数顺序的坑
  10. python协同过滤算法_协同过滤算法介绍及算法实现