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  会编译报错的)。
  • 接口中的方法是不能在接口中实现的,只能由实现的接口的类来实现接口中的方法

Java学习之接口概念的更多相关文章

  1. Java学习:接口(interface)的使用于注意事项

    接口 接口就是一种公共的规范标准.只要符合规范标准,就可以大家通用. 接口就是多个类的公共规范.接口是一种引用数据类型,最重要的内容就是其中的:抽象方法. 如何定义一个接口的格式 如何定义一个接口的格 ...

  2. JAVA学习笔记--接口

    一.抽象类和抽象方法 在谈论接口之前,我们先了解一下抽象类和抽象方法.我们知道,在继承结构中,越往下继承,类会变得越来越明确和具体,而往上回溯,越往上,类会变得越抽象和通用.我们有时候可能会需要这样一 ...

  3. java学习之接口、多态和内部类

    接口是一组行为的规范.定义.接口是面向对象编程体系中的思想精髓之一,使用接口可以让我们的程序更加利于变化. 接口的格式: interface 接口名称{ 全局变量: 抽象方法: } 接口中的成员修饰符 ...

  4. Java学习之基本概念

    1.java体系结构: j2se:是Java的标准版,用于标准的应用开. j2ee:是Java的企业版,用于企业级的应用服务,web服务开发. j2me:是Java的微型版,用户手机或嵌入式开发. p ...

  5. java学习之面向对象概念

    思考的两种方式: 举例: 把大象放到冰箱里 一.面向过程 :[打开冰箱->把大象放里面->关上冰箱门]面向过程注重的是过程,也就是(动作[函数]),然后按照动作依次去执行就好了. 代表语言 ...

  6. java中的接口概念

    接口的特点: 接口中只有抽象方法和全局常量 public interface className{} 范例:简单的代码模型 interface A{ public static final Strin ...

  7. Java学习之接口

    接口作用:为类提供额外功能(方法) 一.接口定义 interface IDemo { ;//可以简写:int NUM=4; public abstract void show();//可以简写:voi ...

  8. [ Java学习基础 ] Java的抽象类与接口

    一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...

  9. Java 学习(2):java 基础概念

    Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 基础语法: 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.以 ...

随机推荐

  1. AVL树(平衡二叉树)

    定义及性质 AVL树:AVL树是一颗自平衡的二叉搜索树. AVL树具有以下性质: 根的左右子树的高度只差的绝对值不能超过1 根的左右子树都是 平衡二叉树(AVL树) 百度百科: 平衡二叉搜索树(Sel ...

  2. 【bzoj2084】[Poi2010]Antisymmetry

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1205  Solved: 756[Submit ...

  3. 转 OGG Troubleshooting-Database error 1 (ORA-00001: unique constraint ...)

    Q5: After imp data to target, when we start replc process, we find the following error: 2011-11-10 0 ...

  4. pageHelper分页插件失效问题

    在bootstrap中引用pageHelper进行页面分页<dependency><groupId>com.github.pagehelper</groupId>& ...

  5. ios-获取系统相簿里边的所有照片

    #import<AssetsLibrary/AssetsLibrary.h> -(void)getImgs{ dispatch_async(dispatch_get_main_queue( ...

  6. Azure PowerShell 在ARM环境下使用指定 vhd(本地化后的磁盘) 来创建虚拟机

    #此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...

  7. 【转载】Hierarchal Temporal Memory (HTM)

    最近在看机器学习,看能否根据已有的历史来预测Hardware的故障发生概率.下文是一篇很有意思的文章,转自 http://numenta.org/htm.html. NuPIC是一个开源项目,用来实现 ...

  8. Javascript中setTimeout()以及clearTimeout( )的使用

    setTimeout setTimeout( ) 是属于 window 的 method, 这是用来设定一个时间,时间到了, 就会执行一个指定的 方法.练习一:等候三秒才执行的 alert( )set ...

  9. swift的static和class修饰符---What is the difference between static func and class func in Swift?

    Special Kinds of Methods Methods associated with a type rather than an instance of a type must be ma ...

  10. mybatis传入参数类型parameterType和输出结果类型resultType详解

    前言 Mybatis的Mapper文件中的select.insert.update.delete元素中都有一个parameterType和resultType属性,parameterType属性用于对 ...