java基础-接口
浏览以下内容前,请点击并阅读 声明
接口是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基础-接口的更多相关文章
- Java 基础 接口和多态
接口 接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的 ...
- Java基础接口和抽象类区别(二)
抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: 抽象方法必须用abstract关键字进行修饰.如果一个类含有抽象方法,则 ...
- Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,
36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口 ...
- [Java 基础]接口
抽象类和抽象方法 抽象方法 在面向对象编程语言中抽象方法指一些只有方法声明而没有具体方法体的方法抽象方法一般存在于抽象类或接口中. java中,抽象方法就是以 abstract 修饰的方法,只需要声明 ...
- java基础接口练习
1.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法voidprintCapitalLetter():在接口InterfaceB中有个方法void pri ...
- Java基础--接口和抽象类的区别
任何不谈使用方法的空理论都是耍流氓 使用场景 · 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧(Java1.8中接口也可以这么做了) · 如果你想实现多重继承,那么你必须使用接口 ...
- java基础—接口概念
一.接口的概念 JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如“金丝猴是一种动物”,金丝猴从动物这个类继承,同时“金丝猴是一种值钱的东西”,金丝猴从“值钱的东西”这个类继承,同时“金丝猴 ...
- java基础——接口与抽象类的区别
(1)首先接口和抽象类的设计目的就是不一样的.接口是对动作的抽象,而抽象类是对根源的抽象. (2)对于抽象类,一个类只能继承一个抽象类.但是一个类可以同时实现多个接口. (3)接口是公开的,里面不能有 ...
- Java基础——接口
一:接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数. 在封装与接口中,private关键字封装了对象的内部成员.经过封装,产品隐藏了内部细节,只提供给用户接口(int ...
随机推荐
- 在Excel中使用SQL语句查询和筛选
本文转自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html 今天在微博上看到@数据分析精选 分享的一篇文章,是关于<在Excel中使用SQ ...
- QT中使用函数指针
想仿命令行,所以定义了一个类,让一个String 对应一个 function,将两者输入list容器. 类中定义了 QString commandStr; void (MainWindow::*com ...
- nginx图片处理
前言 不管一个系统或网站的大与小,都存在相应的图片处理,生成缩略图.为图片加水印等等,如果涉及到APP端,这个图片的处理需求变得更加重要了,因为在目前看来,客户端的屏幕大小不一,会导致以下问题: 1. ...
- golang笔记——函数与方法
如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...
- R语言爬虫初尝试-基于RVEST包学习
注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...
- PHP常用字符串的操作函数
字符串转换类函数 addcslashes函数:以C语言风格使用反斜线转义字符串中的字符 addslashes函数:使用反斜线引用字符串 chop函数:清除字符串中的连续空格 get_html_tran ...
- Android 学习笔记
1.sleep(),wait(),notify(),notifyAll() sleep()是线程类的静态方法,阻塞线程一定时间后再次使线程处于可以被调度运行的状态wait(),notify(),not ...
- 使用github pages, hexo搭建个人博客教程
具体的原理性的东西就不说了直接上教程,怕等下自己忘了. 一. github 阶段 申请一个github 账号并成功登录进去. 创建一个名字为xxx.github.io的空项目. 二. hexo 阶段 ...
- Servlet 之 ServletContext
package cn.jiemoxiaodi.servlet_servletcontext; import java.io.IOException; import java.io.PrintWrite ...
- System Error Codes
很明显,以下的文字来自微软MSDN 链接http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx M ...