Java千百问_05面向对象(004)_java接口到底是什么
1、什么是接口
接口(interface)不是一个类,它是抽象方法的集合。一个类实现一个接口,从而继承和实现接口的抽象方法。
抽象方法看这里:java中抽象概念如何体现的
接口的特点如下,先看与类类似的特点:
- 接口的写法和写一个类类似,但它们是两个不同的概念。类描述对象的属性和行为。接口仅仅定义了事物的行为,且不会具体化这个行为。
- 除非实现接口的是抽象类,不然接口中的所有方法必须在类(实现这个接口的类)中定义且实现。
- 接口同类一样,可以包含任何数量的方法。
- 接口同类一样,被写在同一个.java扩展名的源文件中,文件名与接口名称一致。
- 接口同类一样,会被编译为一个.class文件。
- 同类一样,需要指定包(package),来表明接口所在的目录结构。了解更多package看这里:package和import作用是什么
与类不同的几个方面:
- 接口不能被实例化。
- 接口不包含任何构造函数。
- 接口中的所有方法都是抽象的。
- 接口不包含实例字段。但可以定义常量,使用static和final关键字。
了解常量看这里:局部变量、类变量、实例变量有什么区别 - 类通过实现接口重写接口的方法,而不是继承。
- 接口可以继承另一个接口。
2、如何编写一个接口
使用interface关键字声明一个接口。
例子:
/* File name : NameOfInterface.java */
import java.lang.*;
//Any number of import statementspublic interface NameOfInterface
{//Any number of final, static fields//Any number of abstract method declarations
}
编写接口需要注意:
- 接口是隐式抽象的。声明一个接口,不需要使用abstract关键字。
- 接口中的每个方法也隐式抽象的。方法也不需要abstract关键字。
- 接口中的方法是隐式公开的,即public。
例子:
/* File name : Animal.java */
interface Animal {public void eat();public void travel();
}
3、如何实现一个接口
当一个类实现一个接口,可以认为该类同意接受接口定义的行为。如果一个类不实现该接口的所有行为,该类必须自己声明为abstract。
类使用implements关键字来实现一个接口。如下:
/* File name : MammalInt.java */
public class MammalInt implements Animal{public void eat(){System.out.println("Mammal eats");}public void travel(){System.out.println("Mammal travels");}public int noOfLegs(){return 0;}public static void main(String args[]){MammalInt m = new MammalInt();m.eat();m.travel();}
}
这将产生以下结果:
Mammal eats
Mammal travels
重写接口中的方法有几个规则:
- 接口方法抛出的异常在被实现时也需要抛出。
- 重写方法时,应保持接口方法的参数和返回类型一致。
- 一个实现类本身可以是抽象的,如果抽象类,接口方法可以不实现。
- 一个类只能扩展一个类,但能实现多个接口。
- 一个接口可以扩展另一个接口,类似于一个类可以扩展另一个类。
Java千百问_05面向对象(004)_java接口到底是什么相关推荐
- Java千百问_05面向对象(012)_泛型是什么
1.什么是泛型 泛型是Java SE 1.5的新特性,泛型即参数化类型,也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. ...
- Java千百问局部变量、类变量、实例变量有什么区别
Java千百问局部变量.类变量.实例变量有什么区别 局部变量.类变量.实例变量有什么区别 在聊局部变量.类变量.实例变量有什么区别之前,我们需要了解一下Java变量. 1.Java变量是什么 在数学世 ...
- Java千百问_03基本语法(002)_java都有哪些关键字
java都有哪些关键字 首先我们来看看什么是关键字,关键字的含义. 1.java关键字是什么意思 关键字是电脑语言里事先定义的,有特别意义的特殊标识符,又叫保留字. Java的关键字对Java的编译器 ...
- Java千百问_03基本的语法(005)_二进制是如何做位运算的
点击进入_很多其它_Java千百问 二进制是如何做位运算的 程序中的全部数在计算机内存中都是以二进制的形式储存的.位运算说白了,就是直接对整数在内存中的二进制位进行操作. 其它运算符看这里:java种 ...
- Java千百问_07JVM架构(015)_XmnXmsXmxXss有什么区别
点击进入_更多_Java千百问 1.XmnXmsXmxXss有什么区别 首先,Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. ...
- Java千百问_07JVM架构(009)_什么是新生代的复制算法
点击进入_更多_Java千百问 1.什么是新生代的复制算法 了解堆内存看这里:java堆内存是什么样的 了解java垃圾回收看这里:java垃圾回收机制是什么 所谓复制算法(Copying),即将内存 ...
- Java千百问_01基本概念(007)_线程的状态有哪些
点击进入_更多_Java千百问 1.线程的状态有哪些 在java中java.lang.Thread类有一个变量threadStatus,标示了该线程的当前状态,它是一个int类型,但是对应的get方法 ...
- Java千百问_01基本概念(012)_Socket是什么
[点击进入_更多_Java千百问][1] [1]: http://blog.csdn.net/ooppookid/article/category/6134850 ###1.什么是Socket Soc ...
- Java千百问_06数据结构(014)_java数组如何存储在内存中
1.数组的内存空间是何时分配的 Java中的数组是用来存储同一种数据类型的数据结构,一旦初始化完成,即所占的空间就已固定下来,初始化的过程就是分配对应内存空间的过程.即使某个元素被清空,但其所在空间仍 ...
最新文章
- Spring:SpringMVC一例
- mysql 6.5安装_(整理)MySQL_REHL6.5 安装MySQL5.5
- Python基础训练题-简单数学公式
- 13行满分代码:1038 统计同成绩学生 (20分)
- Jerry Wang的微信小程序开发系列文章
- 前端学习(1357) :模板配置
- php适用于什么服务器,php – 找不到laravel类(适用于localhost但不适用于DO服务器)...
- Ray集群搭建 Python Demo
- 索尼发布Xperia 8手机:采用骁龙630处理器
- c++ h264RTP接收和发送程序
- form表单自动回车提交
- 一种巧妙且简单的数据增强方法 - MixUp 小综述
- CMakeLists编译
- 11.3.1越狱后无cydia清除越狱环境重新越狱
- vue部署到服务器 路由刷新找不到
- 判断标题不为空(包含空格)
- JS实现点击按钮图片左右切换、点击图片按钮出现下拉菜单
- shiro官方源码包下载
- Python列表的相关操作
- 谈谈 996 背后的现象
热门文章
- pythonpandas重复数据统计_python – 连续的pandas数据帧之间的重复计算
- matlab动力学仿真_机械系统动力学MATLAB仿真(上)
- requestIdleCallback函数
- 设备 esp32_低功耗ESP32手持式袖珍显示屏
- HTML出现jQuery.Deferred exception: undefined is not a function,已解决
- mongodb获取数组中只符合条件的元素
- php如何防止重复提交表单,如何防止php重复提交表单方法
- oracle无效的关系运算符_每日一课 | Java 8中的instanceof运算符和访客模式替换
- 如何真正实现无提示保存Excel文档
- 超越Mask-RCNN:谷歌大脑的AI,自己写了个目标检测AI