这一章节我们来讨论一下接口。
之前我们已经聊过抽象类,他已经进行了第一步的抽象,把某些方法抽象出来,然后在子类那里实现,但他不是完全抽象。
而接口,就是进一步抽象,它里面全是没有实现的方法,所以的方法都在实现类里面实现。
1.概念
接口:就像类与类之间的一种协议,只需要知道某个类实现的某个接口, 那么,他就可以通过调用接口里面的方法来指向这个类的实现。
2.特性
(1)使用interface标注
(2)完全抽象
(3)属性域必须是public final static(这个是编译器自动转换的)
(4)方法必须是public
(5)向上转型,为父类指向子类对象提供途径,同时也使得java拥有多态这个特性
(6)不可以实例化
(7)接口可以多重实现
interface Instrument {
int id=0;
void Play();
}
3.实例
package com.ray.ch07;
public class Test {
public void tune(Instrument instrument) {
instrument.Play();
}
public void tune(Instrument[] instruments) {
for (int i = 0; i < instruments.length; i++) {
tune(instruments[i]);
}
}
public static void main(String[] args) {
Test test = new Test();
// Instrument instrument = new Instrument();//error
Instrument wind = new Wind();
Instrument bass = new Bass();
Instrument[] instruments = { wind, bass };
test.tune(instruments);
System.out.println(Instrument.id);// id是static
}
}
interface Instrument {
// private int id=0;//error
// private void Play();//error
int id = 0;
void Play();
}
class Wind implements Instrument {
@Override
public void Play() {
// id=2;//The final field Instrument.id cannot be assigned
System.out.println(id);
System.out.println("wind play");
}
}
class Bass implements Instrument {
@Override
public void Play() {
System.out.println("bass play");
}
}
输出:
0
wind play
bass play
0
从上面的代码可以看见:
1.接口是不可以new 的
2.子类必须实现接口的方法
3.通过向上转型,以Instrument为类型定义的wind和bass,也可以调用play方法,而且运行时自动识别应该绑定那个play方法
4.由于wind和bass必须重写play,因此play一定是public,因为wind和bass不是继承Instrument
5.我们通过打印Instrument里面的id,知道id一定是static,因为可以直接使用Instrument调用,而不需要new
6.通过在实现类wind里面修改id,就可以看到他的提示,提示id是final的。
7.接口的多重实现我们将在后面讲述。
总结:这一章节主要讨论了接口的概念、特性,以及举例来说明这些特性。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...
用户可以轻松地导入现有的Java项目,或者从头开始创建新的项目,包括Maven或Gradle构建系统。 3. **构建工具**:Eclipse 集成了构建工具,如Ant和Maven,使得构建和管理项目依赖变得简单。对于现代Java开发,Maven...
标签 "aip sdk" 进一步确认了这是一个与百度AIP相关的SDK,通常这样的SDK会提供一系列预先封装好的接口,使得开发者可以快速地在自己的项目中集成AI功能,而无需从头开始编写复杂的算法和模型。 在压缩包的文件名称...
标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...
1. **文档创建**:支持从头创建新的文档,或基于现有模板生成文档。 2. **文档读取和解析**:能够打开并读取多种格式的文档,如DOCX、DOC、RTF、PDF、HTML等。 3. **格式转换**:可以在不同文件格式之间进行转换,...
【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...
Java Swing是Java GUI(图形用户界面)开发的一个重要组件,它是Java Foundation Classes (JFC)的一部分,用于构建桌面应用程序。Swing提供了丰富的组件库,允许开发者创建美观且功能丰富的交互式用户界面。在这个...
在Java编程中,多文件...通过这个"java-多文件上传dome"工具包,你可以快速实现上述功能,无需从头编写所有代码。不过,记得在实际项目中,除了功能实现,还要关注性能、安全性和可维护性,确保应用程序的稳定运行。
Java SDK是许多软件开发中的重要组成部分,特别是在与服务器端交互时...通过学习和使用这个SDK,开发者可以迅速在自己的应用中实现稳定、可靠的即时通信功能,而无需从头构建整个通讯系统,大大节省了开发时间和资源。
在Java编程中,库(Library)是预先编写好的代码集合,程序员可以导入并直接使用,无需从头开始编写所有功能。这些库通常以JAR(Java Archive)文件的形式存在,里面封装了类和方法,可供应用程序调用。Java库广泛...
- **LinkedList**:使用双向链表,插入和删除速度快,但访问元素需要从头开始遍历,效率较低。 这些是Java笔试中常见的知识点,涵盖了面向对象、数据类型、多线程、异常处理、集合框架等方面,对于准备Java面试或...
通过将这个wheel文件安装到Python环境中,开发者能够快速地在他们的Django项目中利用这些功能,而无需从头开始编写所有代码。不过,为了充分利用这个库,开发者需要对Django框架有深入理解,并且能够查阅库的文档或...
这意味着它可能使用了 Java 核心库中的接口和类,并且遵循了 Java 的编程规范。对于 Java 开发者来说,这样的库是提高生产力的重要资源。 根据压缩包的文件名 "ks-java-lib-master" 可以推测,这可能是一个 Git ...
使用这个库,开发者可以避免从头实现模糊算法,而是直接调用库中的函数,减少工作量,提高效率。在实际应用中,这种模糊视图背景常用于对话框、弹出窗口或者浮动视图,以提供更好的视觉层次感和用户体验。 总结来说...
【标题】:“curso-java-pildorasInf:从头开始学习Java” 这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由...
1. **创建文档**:通过API,开发者能够从头开始构建Word文档,包括添加文本、图片、表格、形状、页眉和页脚等元素。 2. **编辑现有文档**:能够打开和修改现有的DOC或DOCX文件,进行内容替换、格式调整、页面布局...
Java平台提供了一系列库来支持这些操作,本项目中涉及的主要有Spire.Doc、Spire.PDF以及Apache PDFBox。让我们详细探讨这些库的功能及其在Java开发中的应用。 首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,...
List接口是Java集合框架中的核心接口之一,它继承自Collection接口,并具有特定的特性:元素可以重复,保持元素的顺序,并允许对元素的位置进行精确控制。List接口有多个实现类,包括ArrayList、LinkedList、Vector...