浏览以下内容前,请点击并阅读 声明

接口是java语言中的一个引用类型,和类一样,接口可以包含常量,方法签名,默认方法,静态方法和嵌套类型。含有方法主体的只有其中的默认方法和静态方法。接口不能被实例化,它们只能被类实现或者被其他接口继承。

接口的声明部分包含修饰词,关键词interface,接口名称,extends关键词+由逗号分隔开的继承接口名称(可有可无),和一个接口主体,如下例所示:

public interface GroupedInterface extends Interface1, Interface2, Interface3 {

    // 定义一个常量

    double E = 2.718282;

    // 方法签名
void doSomething (int i, double x);
int doSomethingElse(String s);
}

public修饰词表明该接口可以用在任何地方,没有该修饰词,则该接口仅在程序包内可见。

接口可以继承其他接口,和类的继承类似,不过接口可以继承多个接口,而类只能继承一个父类。

接口的主体由一对花括号和括号内的代码组成,接口主体中可以包含抽象方法,默认方法和静态方法,抽象方法只有方法签名,以分号结尾,默认方法以关键词default修饰,静态方法以关键词static修饰,接口中所有的方法可视范围隐含地为public,所以可以省略public修饰词。

除了上述三中方法意外,接口中还可包含常量声明,常量隐含的修饰词为public,static,final,可以省略,另外接口主体中还可包含嵌套类型。

实现接口

要定义一个实现某接口的类,就要在类的声明中包含implements短语,就是在继承类名称(没有继承的类则在需要声明的类名称之后)后接implements关键词+实现的接口名称,一个类可实现多个接口,由逗号隔开,类的主体中必须实现接口中定义的抽象方法,方法的签名要与接口中的一致,如下例所示:

//接口Relatable中有一个名为isLargerThan的抽象方法(声明为 public int isLargerThan(Relatable other);),
//所以要实现这个接口,类中必须提供该方法的实现
public class RectanglePlus implements Relatable {
public int isLargerThan(Relatable other) {
//...
}
  //省略其他方法声明...    
}

将接口视为引用类型

接口的名称可以用在任何可以使用其他数据类型名称的地方,如果定义一个变量的类型为某个接口,则赋值给该变量的对象类型必须是实现该接口的类。

//以下Intf是一个接口,而IntfImpl实现了该接口,可以将IntfImpl实例赋值给Intf类型的变量
Intf var=new IntfImpl()

接口的演变

一个接口一般不会是一成不变的,有时候会按照需求给接口添加一些新方法,如果是添加抽象方法的话,实现旧接口的类因为没有实现新添加的方法而将无法与新接口兼容,一个可行的解决方法就是将新添加的方法设置为默认方法,这样,就能使新接口与旧的类兼容,在接口中声明默认方法必须提供该方法的主体。此外,也可在接口中添加静态方法,这样,旧的类无需修改或者重新编译就可直接使用新添加的方法。

默认方法

默认方法的使用能够向接口添加新功能的同时又能保证与原有实现该接口类的兼容性。

默认方法的继承

当有一个接口继承一个含有默认方法的接口时,可以对接口中的默认方法作如下处理:

  • 不提及父接口的默认方法,这样该接口就继承了父接口的默认方法
  • 重新声明默认方法,将其变为抽象方法
  • 重新定义默认方法,即覆写

静态方法

在接口中定义静态方法,则其所有的实现类将继承该静态方法。

java基础-接口的更多相关文章

  1. Java 基础 接口和多态

    接口 接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的 ...

  2. Java基础接口和抽象类区别(二)

    抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: 抽象方法必须用abstract关键字进行修饰.如果一个类含有抽象方法,则 ...

  3. Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,

    36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口 ...

  4. [Java 基础]接口

    抽象类和抽象方法 抽象方法 在面向对象编程语言中抽象方法指一些只有方法声明而没有具体方法体的方法抽象方法一般存在于抽象类或接口中. java中,抽象方法就是以 abstract 修饰的方法,只需要声明 ...

  5. java基础接口练习

    1.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法voidprintCapitalLetter():在接口InterfaceB中有个方法void pri ...

  6. Java基础--接口和抽象类的区别

    任何不谈使用方法的空理论都是耍流氓 使用场景 · 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧(Java1.8中接口也可以这么做了) · 如果你想实现多重继承,那么你必须使用接口 ...

  7. java基础—接口概念

    一.接口的概念 JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如“金丝猴是一种动物”,金丝猴从动物这个类继承,同时“金丝猴是一种值钱的东西”,金丝猴从“值钱的东西”这个类继承,同时“金丝猴 ...

  8. java基础——接口与抽象类的区别

    (1)首先接口和抽象类的设计目的就是不一样的.接口是对动作的抽象,而抽象类是对根源的抽象. (2)对于抽象类,一个类只能继承一个抽象类.但是一个类可以同时实现多个接口. (3)接口是公开的,里面不能有 ...

  9. Java基础——接口

    一:接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数. 在封装与接口中,private关键字封装了对象的内部成员.经过封装,产品隐藏了内部细节,只提供给用户接口(int ...

随机推荐

  1. 搬家到cnblogs

    从openshift搬到LOFTER再到点点然后来cnblogs,晃悠一大圈,主要是没时间学习很多东西,再加上cnblogs的搜索收录情况比较好一点(百 度搜索).另外听闻百度空间bye-bye了,以 ...

  2. centos 软件包安装与管理

    http://rpmfind.net/linux/RPM/index.html http://pkgs.org/ https://sourceforge.net/

  3. php无刷新上传图片和文件

    核心思想:通过Html的iframe标签属性操作顶级窗口,再用php动态无刷新上传图片文件. 示例如下: demo |------uploads #存放上传的文件 |------index.php | ...

  4. golang笔记——数组与切片

    一.切片的定义 我们可以从数组(go语言中很少直接使用数组)或者切片来初始化一个新的切片,也可以直接通过 make 来初始化一个所有元素为默认零值的切片. //1.通过数组来初始化切片 arr := ...

  5. CSS百分比定义高度的冷知识

    当我们给块级元素设置响应式高度的时候,例如给div设置height=50%,往往没能看到效果. 原因是百分比的大小是相对其父级元素宽高的大小,如最外层元素设置的百分比是对应屏幕而言的. 需要了解的是对 ...

  6. 回车符(CR)与换行符(LF), '\r'和'\n'的区别

    回车”(Carriage Return)和“换行”(Line Feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下 ...

  7. [Machine Learning & Algorithm] 决策树与迭代决策树(GBDT)

    谈完数据结构中的树(详情见参照之前博文<数据结构中各种树>),我们来谈一谈机器学习算法中的各种树形算法,包括ID3.C4.5.CART以及基于集成思想的树模型Random Forest和G ...

  8. [SQL] SQL学习笔记之基础操作

    1 SQL介绍 SQL 是用于访问和处理数据库的标准的计算机语言.关于SQL的具体介绍,我们通过回答如下三个问题来进行. SQL 是什么? SQL,指结构化查询语言,全称是 Structured Qu ...

  9. PHP代码编写规范

    一. 变量命名 a) 所有字母都使用小写 b) 首字母根据变量值类型指定 i. 整数i ii. 浮点数f iii. 字符串s iv. 布尔值b v. 数组a vi. 对象o vii. 资源r viii ...

  10. godaddy域名使用DNSPod做DNS解析图文教程

    考虑到很多朋友看到英文就很头痛,在godaddy解析域名也不怎么方便,我们需要把在godaddy注册的域名,使用国内的DNS服务器,全部都是免费的哦. 首先打开www.dnspod.cn  用自己的常 ...