关于接口

接口描述了实现了它的类拥有什么功能。因为Java是强类型的,所以有些操作必须用接口去约束和标记。接口作为类的能力的证明,它表明了实现了接口的类能做什么。

类似与class,interface也是java中的一种引用类型。

接口中的成员

接口中的所有的成员,缺省情况下都是public的,也必须是public,无论是方法,还是字段。因为接口就是规定了API,如果实现的类不公开接口中的API,怎么能叫API呢?

一般情况下,接口中可以 定义方法 和 字段。

接口中的字段,必须(默认)为 public static final  。在定义的接口中必须初始化,因为是final。它们将成为类中的静态常量字段

接口中的方法,必须(默认)为 public abstract    。只需在接口中定义即可,不能实现(让实现了接口的类去实现)。将成为类中的public 实例方法  , 实现了接口的类必须实现接口中定义的方法。

定义一个接口

interface InterfaceName [extends interface1,interface2]
{
void foo(); void bar(); //...红色部分是 可选的 }

接口和类之间的implements关系

接口就是用来被实现implements 的 ,不然定义接口也就没意义了。Java中的类只能继承一个父类,但是可以实现多个接口。除了抽象类,普通类必须实现接口中定义的所有方法。

当一个类实现了某个接口后,接口可以看做是 是实现了接口的类 的 父类型。利用多态的特性,我们往往选择面向接口编程,而不是面向具体的类,这样可以让程序员关注API而不是内部实现,并提供更大的灵活性。

public class Test
{ public static void main(String[] args)
{ Workable[] workers = { new Teacher(),new Student()
}; fireWork(workers); } public static void fireWork(Workable[] workers)
{ for (int i = 0; i < workers.length; i++)
{
workers[i].doTask();
} } } interface Workable
{
void doTask();
} class Student implements Workable
{
@Override
public void doTask()
{
System.out.println("学生的工作是学习");
}
} class Teacher implements Workable
{
@Override
public void doTask()
{
System.out.println("老师的工作是教书");
}
}

每一个Teacher 、Student对象都是Workable对象,可以直接隐式转换。fireWork方法是面向接口编程的思想,传入的参数为Workable数组,那数组中的所有元素都可以执行

doTask方法(这正是接口约束带来的效果),而不管他们的具体类型。

抽象类与接口

java集合框架中的例子。抽象类不必实现接口中的方法,但是普通类一定强制实现接口中的所有方法。

接口和接口之间的extends关系

接口可以扩展extends 已经存在的接口,如果接口A扩展了接口B,则A将继承B中的所有成员,就像他们定义在A中一样。一个接口可以扩展多个接口。

interface Workable
{
void doTask();
} interface SchoolMember extends Workable
{
void sayHello();
}

这样,一个类如果要实现SchoolMember 接口,就必须实现 doTask 和 sayHello  2个方法,因为SchoolMember继承了doTask方法。

接口的总结

1、接口不能new出实例。但可以定义接口类型的变量,去引用实现了这个接口的类的对象。此时接口相当于实现类的父类。

2、接口中的方法不实现,而是用一个 分号  ; 代替函数体。

3、接口是Java中的一种引用类型。

java中的接口interface的更多相关文章

  1. java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  2. 第五节:详细讲解Java中的接口与继承

    前言 大家好,给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢 什么是接口(interface) 接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象 interface ...

  3. JavaSE入门学习20:Java面向对象之接口(interface)(一)

    一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...

  4. Java学习笔记二十八:Java中的接口

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

  5. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

  6. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  7. JAVA中限制接口流量、并发的方法

    JAVA中限制接口流量可以通过Guava的RateLimiter类或者JDK自带的Semaphore类来实现,两者有点类似,但是也有区别,要根据实际情况使用.简单来说, RateLimiter类是控制 ...

  8. java中map接口hashMap以及Enty之间的用法和关系

    java中map接口hashMap以及Enty之间的转换 首先说的是map接口: Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value ...

  9. Java 中的接口有什么作用?以及接口和其实现类的关系?

    Java 中的接口有什么作用? - Ivony的回答 - 知乎 https://www.zhihu.com/question/20111251/answer/16585393 这是一个初学者非常常见的 ...

随机推荐

  1. java学习第四天 类和变量

    java也属于面向对象的编程 面向对象的三大特征:  封装 继承 多态 类 对象 对象:真实存在的唯一的事物 面向对象编程(oop)思想力图使对计算机语言中的事物的描述和自然界中的事物尽可能保持一致 ...

  2. xml 基础学习备忘

    <?xml version="1.0" encoding="UTF-8"? standalone="yes"> 这里的encod ...

  3. [译]:Orchard入门——使用标签管理内容

    原文链接:Organizing Content Using Tags 在Orchard中,内容项可以使用标签来分类,同时,通过格式为 ~/tags/tag-name 的url可以直接查看包含对应标签关 ...

  4. HDU 2082 找单词 (多重背包)

    题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...

  5. Chart图表

    这东西挺直观 封装个类 public class aaa { private string name; public string Name { get { return name; } set { ...

  6. a pity

    机会只眷顾有准备且自信的人,此生谨记. ——Charles Hsu 2014-09-04

  7. 要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。

    找到该文件所在文件夹,右键属性,安全选项卡,添加-aspnet用户,并设置其权限为完全控制.如果还是不行,就添加一个Everyone用户并赋予完全控制权限windows server 2008中IIS ...

  8. Oracle 取随机数

    1.从表中随机取记录 select * from (select * from staff order by dbms_random.random)      where rownum < 4 ...

  9. EF MySql 配置文件

    <?xml version="1.0" encoding="utf-8"?><!--有关如何配置 ASP.NET 应用程序的详细信息,请访问 ...

  10. 自己写的AutoMapper

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...