这一章节我们来说一下接口另一个特性:多重接口。
在平常,使用继承,我们只是继承某一类,只能够一种向上转型,但是在接口的使用方面,可以实现多个接口,然后实现多种的向上转型。
我们先上代码:
package com.ray.ch07;
public class Test {
public static void testSwim(CanSwim canSwim) {
canSwim.swim();
}
public static void testEat(CanEat canEat) {
canEat.eat();
}
public static void testRun(CanRun canRun) {
canRun.run();
}
public static void main(String[] args) {
Person person = new Person();
testSwim(person);//向上转型为CanSwim
testEat(person);//向上转型为CanEat
testRun(person);//向上转型为CanRun
Fish fish = new Fish();
testSwim(fish);//
// testEat(fish);//error,因为没有实现接口,不能向上转型
// testRun(fish);//error,因为没有实现接口,不能向上转型
}
}
interface CanRun {
void run();
}
interface CanSwim {
void swim();
}
interface CanEat {
void eat();
}
class Person implements CanEat, CanRun, CanSwim {
@Override
public void swim() {
System.out.println("i can swim");
}
@Override
public void run() {
System.out.println("i can run");
}
@Override
public void eat() {
System.out.println("i can eat");
}
}
class Fish implements CanSwim {
@Override
public void swim() {
System.out.println("i can swim");
}
}
解释一下上面的代码:
1.建立了三个接口:会游泳,会跑,会吃
2.建立一个Person类,实现上面三个接口
3.建立一个Fish类,只是实现游泳的接口
4.然后在测试代码里面使用策略设计模式,测试一下三种技能
在代码里,Person 分别向上转型为CanRun、CanSwim、CanEat这三种类型,这样大大增强代码的灵活性,要不然我们就必须在测试代码方面增加代码,才能够完整测试。而且也不利于代码的复用,假如CanSwim这个不是接口,他变成了基类,但是他的实现可能对于Person或者Fish来说都是不合适的,而且代码可能歧义,但是现在是接口,只是一种协议,说明子类只是具备某种功能,而这个功能怎么实现,具体需要根据子类的实现来说,这样代码更能够广泛的复用。
总结:这一章节主要讲述了接口的多重实现,以及他的灵活性。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...
标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...
用户可以轻松地导入现有的Java项目,或者从头开始创建新的项目,包括Maven或Gradle构建系统。 3. **构建工具**:Eclipse 集成了构建工具,如Ant和Maven,使得构建和管理项目依赖变得简单。对于现代Java开发,Maven...
标签 "aip sdk" 进一步确认了这是一个与百度AIP相关的SDK,通常这样的SDK会提供一系列预先封装好的接口,使得开发者可以快速地在自己的项目中集成AI功能,而无需从头开始编写复杂的算法和模型。 在压缩包的文件名称...
【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...
【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...
在"Swing外观包.jar"这个文件中,可能包含了一些预设的LookAndFeel实现或者定制的LookAndFeel类,以便开发者可以直接导入并应用于他们的项目中,无需从头开始编写。这大大简化了创建独特界面的过程,使得开发者可以...
标题中的“socket做的支持多线程断点上传or断点续传Java源码”涉及到的是在网络编程中,如何使用Java的Socket API实现一个能够处理断点上传和断点续传功能的服务。这是一个高级的网络编程任务,通常在大型文件传输...
使用这个库,开发者可以避免从头实现模糊算法,而是直接调用库中的函数,减少工作量,提高效率。在实际应用中,这种模糊视图背景常用于对话框、弹出窗口或者浮动视图,以提供更好的视觉层次感和用户体验。 总结来说...
在Java编程中,多文件...通过这个"java-多文件上传dome"工具包,你可以快速实现上述功能,无需从头编写所有代码。不过,记得在实际项目中,除了功能实现,还要关注性能、安全性和可维护性,确保应用程序的稳定运行。
学习List接口及其实现类是理解Java集合框架的关键步骤。通过熟练掌握这些知识,开发者可以更有效地组织和操作数据,提高代码的效率和可维护性。在实际开发中,根据需求选择合适的List实现类,如需要高效随机访问则...
Java SDK是许多软件开发中的重要组成部分,特别是在与服务器端交互时...通过学习和使用这个SDK,开发者可以迅速在自己的应用中实现稳定、可靠的即时通信功能,而无需从头构建整个通讯系统,大大节省了开发时间和资源。
4. **多线程表示**:多线程的两种创建方式是继承`Thread`类和实现`Runnable`接口。同步的实现包括`synchronized`关键字用于方法或代码块,以及`wait()`、`notify()`、`notifyAll()`方法用于线程间的通信。 5. **...
根据给定文件的信息,我们可以提炼出关于Java软件开发中List接口实现类的关键知识点。这部分内容主要聚焦于第11章的“Java集合框架和泛型机制”,特别关注List接口及其几种实现类,包括`ArrayList`、`LinkedList`、`...
在Java编程中,库(Library)是预先编写好的代码集合,程序员可以导入并直接使用,无需从头开始编写所有功能。这些库通常以JAR(Java Archive)文件的形式存在,里面封装了类和方法,可供应用程序调用。Java库广泛...
【标题】"ks-java-lib:包含 Java 的 KS 库" 提供的是一个专门为 Java 开发者设计的库,它扩展了 Java 的功能,为开发者在处理特定任务时提供了便利。这个库可能包含了丰富的类和方法,旨在简化开发过程,提高代码的...
在IT行业中,处理PDF和Word文档是...开发者可以结合这些库,轻松地在Java程序中实现对PDF和Word文档的高效操作,满足各种业务需求。在实际开发中,根据项目的具体需求选择合适的库,能极大地提高开发效率和代码质量。
【标题】:“curso-java-pildorasInf:从头开始学习Java” 这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由...