`

使用接口的核心原因:为了向上转型为多个基类型,以及由此带来的灵活。

JDK 
阅读更多
package thinkingInJava.interfaces;

//: interfaces/Adventure.java
//Multiple interfaces.
/*
 * 本例子展示就是使用接口的核心原因:为了向上转型为多个基类型,以及由此带来的灵活。
 * */
interface CanFight {
	void fight();
}

interface CanSwim {
	void swim();

	void fight();//故意放进一个和接口CanFight相同的方法
}

interface CanFly {
	void fly();
}

class ActionCharacter {
	public void fight() {//故意写一个和接口CanFight,CanSwim相同的方法
		System.out.println("----我可以战斗!");
	}
}

class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly {
	/*
	 * 在父类、接口中那些相同的方法将具有相同的特征签名
	 * 也就是说它们方法的交集将指向同一个代表(这个是自己的称呼哈!O(∩_∩)O哈哈~)
	 */
	public void swim() {
		System.out.println("----我可以游泳!");
	}

	public void fly() {
		System.out.println("----我可以飞翔!");
	}
}

public class Adventure {

	public static void t(CanFight x) {
		System.out.println("来自CanFight:");
		x.fight();
	}

	public static void u(CanSwim x) {
		System.out.println("来自CanSwim:");
		x.swim();
		x.fight();
	}

	public static void v(CanFly x) {
		System.out.println("来自CanFly:");
		x.fly();
	}

	public static void w(ActionCharacter x) {
		System.out.println("来自ActionCharacter:");
		x.fight();
	}

	public static void main(String[] args) {
		/*
		 * t,u,v,w方法中传递的参数可以向上某个接口或者类
		 */
		Hero h = new Hero();
		t(h); // Treat it as a CanFight,向上某个接口CanFight
		u(h); // Treat it as a CanSwim,向上某个接口CanSwim
		v(h); // Treat it as a CanFly,向上某个接口CanFly
		w(h); // Treat it as an ActionCharacter,向上某个类ActionCharacter
	}
} // /:~


运行结果:

来自CanFight:
----我可以战斗!
来自CanSwim:
----我可以游泳!
----我可以战斗!
来自CanFly:
----我可以飞翔!
来自ActionCharacter:
----我可以战斗!



对上述代码进行一下优化

经验来源:在JDK的API文档中我们会经常看见命名的规范和方法的重载,裁图示例!

Arrays.fill

Arrays.binarySearch




package tij.interfaces.test;


/*
 * 参考:package thinkingInJava.interfaces.Adventure.java;
 * 
 * 本例子展示就是使用接口的核心原因:为了向上转型为多个基类型,以及由此带来的灵活。
 * */
interface CanFight {
	void fight();
}

interface CanSwim {
	void swim();

	void fight();// 故意放进一个和接口CanFight相同的方法
}

interface CanFly {
	void fly();
}

class ActionCharacter {
	public void fight() {// 故意写一个和接口CanFight,CanSwim相同的方法
		System.out.println("----我可以战斗!");
	}
}

class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly {
	/*
	 * 在父类、接口中那些相同的方法将具有相同的特征签名 也就是说它们方法的交集将指向同一个代表(这个是自己的称呼哈!O(∩_∩)O哈哈~)
	 */
	public void swim() {
		System.out.println("----我可以游泳!");
	}

	public void fly() {
		System.out.println("----我可以飞翔!");
	}
}

public class Adventure {
	/*
	 * 在这里重载了方法getPath:传递的参数不同,方便统一个调用名称
	 */

	public static void getPath(CanFight x) {
		System.out.println("来自CanFight:");
		x.fight();
	}

	public static void getPath(CanSwim x) {
		System.out.println("来自CanSwim:");
		x.swim();
		x.fight();
	}

	public static void getPath(CanFly x) {
		System.out.println("来自CanFly:");
		x.fly();
	}

	public static void getPath(ActionCharacter x) {
		System.out.println("来自ActionCharacter:");
		x.fight();
	}

	public static void main(String[] args) {
		/*
		 * 我们只需使用Hero类的上级来指向对象
		 * 这种方法也是非常实用的方式
		 */
		CanFight cf = new Hero();
		getPath(cf);
		
		CanSwim cs = new Hero();
		getPath(cs);
		
		CanFly cfly = new Hero();
		getPath(cfly);
		
		ActionCharacter ac = new Hero();
		getPath(ac);
	}
}




输出的结果和刚才一样:

来自CanFight:
----我可以战斗!
来自CanSwim:
----我可以游泳!
----我可以战斗!
来自CanFly:
----我可以飞翔!
来自ActionCharacter:
----我可以战斗!


.
分享到:
评论

相关推荐

    java向上转型向下转型

    Java 向上转型与向下转型 Java 转型是 Java 编程中的一种非常重要的概念,主要包括向上转型和向下转型两种。向上转型是指将子类对象转换为父类对象,而向下转型是指将父类对象转换为子类对象。 向上转型...

    java向上转型和向下转型.doc

    在Java编程语言中,向上转型和向下转型是对象多态性的关键组成部分,它们涉及到对象的类型转换,使得程序设计更加灵活且易于维护。下面将详细解释这两种转型的概念、原理及应用。 ### 向上转型 向上转型指的是将一...

    广发证券长安汽车000625品牌向上筑牢盈利底座,转型构建

    【标题】"广发证券长安汽车000625品牌向上筑牢盈利底座,转型构建" 是一篇关于中国长安汽车公司(股票代码000625)的深度研究报告,由知名证券机构广发证券发布。这篇报告的核心是探讨长安汽车如何通过提升品牌形象...

    学习Java之如何正确地向上转型与向下转型.rar

    本文将深入探讨这两种转型方式以及如何正确使用它们。 **向上转型(Upcasting)** 向上转型是指将子类对象赋值给父类引用,这是一个隐式的过程,无需显式声明。例如: ```java Animal animal = new Dog(); // 向上...

    向上转型1

    向上转型是面向对象编程中的一个重要概念,主要应用于Java等支持多态特性的语言。它指的是将子类的对象赋值给父类的引用,这样就可以通过父类引用来调用子类中继承自父类的方法。在Java中,这种转换是自动的,无需...

    java中对象转型多态抽象类接口笔记.doc

    ### Java中的对象转型与多态 ...Java中的对象转型、多态、抽象类以及接口是面向对象编程的重要概念。通过这些机制,我们可以编写更加灵活、可扩展的代码。理解这些概念对于开发高质量的Java应用程序至关重要。

    Java 向上转型和向下转型的详解

    向上转型是将子类对象转换为父类类型的过程,而向下转型是将父类对象转换为子类类型的过程。 向上转型(Upcasting) 向上转型是将子类对象转换为父类类型的过程。在 Java 中,我们可以使用子类对象来初始化父类...

    什么是向下转型和向上转型.xmind

    什么是向下转型和向上转型

    多态和接口学习笔记

    在Java编程语言中,多态(Polymorphism)和接口(Interface)是两个核心概念,它们对于理解和构建面向对象程序至关重要。多态性是面向对象编程的三大特性之一,另外两个是封装和继承。接口则提供了类之间的抽象连接...

    Java向上转型和向下转型实例解析

    向上转型是指子类对象转换为父类或接口,而向下转型是指父类对象转换为子类。了解向上转型和向下转型的机制可以帮助我们更好地理解Java中的继承机制,并且能够更好地应用继承机制来编写更加灵活和可扩展的代码。 ...

    java的对象引用与对象的区别、多态性理解、向上转型和向下转型、栈和堆等综合型的知识.docx

    本文将深入探讨对象引用与对象的区别、多态性、向上转型和向下转型以及栈和堆内存的管理。 首先,让我们了解对象引用与对象的区别。对象是根据类实例化出来的实体,它们在内存中的位置通常在堆区,具有实际的数据和...

    JAVA基础--复习笔记.pdf

    * 多态性的类型:向上转型、向下转型 * 向上转型:子类对象 → 父类对象 * 向下转型:父类对象 → 子类对象 五、抽象类和接口 抽象类和接口是JAVA中两种特殊的类。 * 抽象类:包含一个或多个抽象方法的类 * 接口...

    简单了解Java多态向上转型相关原理

    能够实现的原因,也是因为子类在向上转型的过程中,也许会缩小接口,但至少不会比父类中有的接口还要窄。 向上转型好在哪?如果没有向上转型机制,我们想要达到原来的效果,就需要增加许多重载的 test 方法,这样就...

    java的向上转型(学校教的)

    在主类中people类的声明对象分别作为Chinapeople和Americanpeople类对象的上转型对象,并让这个上转型对象调用showname方法。编写一个people类,该类有string类型的成员变量firstname和lastname来存放people对象的...

    java2 使用教程(第三版) 实验指导 上机实践4 继承与接口

    在实验指导的"上机实践4"部分,你可能会遇到创建和使用继承、上转型对象以及接口的实例。例如,你可能需要定义一个基础类,然后创建它的子类,利用继承来扩展功能。接着,你会使用上转型对象来处理不同子类的实例,...

    证券行业2021年度中期投资策略:周期向上,变现财富管理红利(28页).pdf

    证券行业的2021年度中期投资策略主要关注两个核心概念:周期向上和财富管理红利的变现。今年上半年,证券板块表现平淡,相对于沪深300指数表现不佳,主要原因是市场风险偏好的下降和对传统业务的依赖。尽管2021年第...

    博腾股份-300363-投资价值分析报告:战略转型初见成效,向上经营拐点持续验证.zip

    报告标题:“博腾股份-300363-投资价值分析报告:战略转型初见成效,向上经营拐点持续验证”揭示了这家名为博腾股份的公司在IT行业的投资潜力和其近期的战略调整成果。本报告将深入探讨博腾股份在IT领域的业务表现、...

    java之向上转型

    Java中的“向上转型”是指将子类对象转换为父类类型的过程。在Java中,这是一种自动转换,无需显式操作。这种转换允许我们用父类的引用去引用子类的对象,从而实现对子类功能的调用,同时保持代码的抽象性和通用性。...

    完整版优质java课件 Java基础入门教程 Java编程技术14 补充--对多态、抽象和接口的理解(共24页).ppt

    在Java编程中,多态性、抽象和接口是面向对象编程的三大核心概念,它们为代码的灵活性、可扩展性和复用性提供了基础。以下是对这些概念的详细解释: 1. **多态性(Polymorphism)**:多态性是面向对象编程的一大...

Global site tag (gtag.js) - Google Analytics