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

接口是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. 《Python核心编程》18.多线程编程(二)

    18.1没有线程支持 #!/usr/bin/env python # -*- coding:utf-8 -*- from time import sleep, ctime def loop0(): p ...

  2. StringBuffer类的功能

    StringBuffer类 1.添加功能 public StringBuffer append(String str):可以把任意类型数据添加到缓冲区,并返回缓冲区域 public StringBuf ...

  3. IBatis 批量插入数据之SqlBulkCopy

    public void AddLetters(IList<int> customerIds, string title, string content, LetterEnum.Letter ...

  4. 概率论与数理统计图解.tex

    \documentclass[UTF8,a1paper,landscape]{ctexart} \usepackage{tikz} \usepackage{amsmath} \usepackage{a ...

  5. JVM Management API

    JVM本身提供了一组管理的API,通过该API,我们可以获取得到JVM内部主要运行信息,包括内存各代的数据.JVM当前所有线程及其栈相关信 息等等.各种JDK自带的剖析工具,包括jps.jstack. ...

  6. codevs1228 苹果树

    题目描述 Description 在卡卡的房子外面,有一棵苹果树.每年的春天,树上总会结出很多的苹果.卡卡非常喜欢吃苹果,所以他一直都精心的呵护这棵苹果树.我们知道树是有很多分叉点的,苹果会长在枝条的 ...

  7. CSS背景background详解,background-position详解

    背景(background)是css中一个重要的的部分,也是需要知道的css的基础知识之一.这篇文章将会涉及css背景(background)的基本用法,包括诸如 background-attachm ...

  8. Apache不重新编译,利用apxs工具给Apache添加模块,如cgi模块

    想实践下Apache是如何运行cgi程序的,却发现先前编译安装Apache的时候,没有安装Apache的cgi模块. 附:CentOS6.x编译安装LAMP(2):编译安装 Apache2.2.25 ...

  9. Android中的动画机制

          1 逐帧动画   逐帧动画 就是一系列的图片按照一定的顺序展示的过程.   逐帧动画很简单, 只需要在drawable中或者anim中定义一个Animation-list 其中包含多个it ...

  10. composer 安装提示 PHP Warning: readfile(): SSL operation failed with code 1

    这是php设置openssl 没有指定cacert.pem (证书) 第一步:下载 cacert.pem 文件下载地址 https://curl.haxx.se/docs/caextract.html ...