`

Java多态性的一个例子

阅读更多
直接上代码吧:
1.test.java
package cn.com;

public class test
{

	public static void main(String[] args)
	{
		A a1 = new A();
		A a2 = new B();
		B b = new B();
		C c = new C();
		D d = new D();

		// 优先级由高到低依次为:
		// the.clarify(O)、super.clarify(O)、the.clarify((super)O)、super.clarify((super)O)

		//
		// a2.clarify(b),a2是一个引用变量,类别为A,则the为a2,
		// b是B的一个的举例,于是它到类A里面找clarify(B obj),没有找到,
		// 于是到A的super(超类)找,而A没有超类,因此转到第三优先级the.clarify((super)O),
		// the仍然是a2,那里O为B,(super)O即(super)B即A,因此它到类A里面找clarify(A obj),
		// 类A有那个窍门,但是由于a2引用的是类B的一个的对象,B覆盖了A的clarify(A
		// obj)窍门,因此最终锁定到类B的clarify(A obj),输出为"B and A”

		System.out.println(a1.clarify(b)); // A and A
		System.out.println(a1.clarify(c)); // A and A
		System.out.println(a1.clarify(d)); // A and D
		System.out.println(a2.clarify(b)); // B and A
		System.out.println(a2.clarify(c)); // B and A
		System.out.println(a2.clarify(d)); // A and D
		System.out.println(b.clarify(b)); // B and B
		System.out.println(b.clarify(c)); // B and B
		System.out.println(b.clarify(d)); // A and D
	}
}



2.A.java
package cn.com;

class A
{
	public String clarify(D obj)
	{
		return ("A and D");
	}

	public String clarify(A obj)
	{
		return("A and A");
	}

}



3.B.java
package cn.com;

class B extends A
{
	public String clarify(B obj)
	{
		return ("B and B");
	}

	public String clarify(A obj)
	{
		return ("B and A");
	}
}

4.C.java
package cn.com;

class C extends B
{
}


5.D.java
package cn.com;

class D extends B
{

}

分享到:
评论
1 楼 mqlfly2008 2010-07-13  
看完了这个,自己试验了下才明白在说什么!

感觉如果用文字表达可能会更加的清晰


在此添加上自己的理解!

在泛型中!首先会寻找对象被定义时被定义的索引A a = new B() ;

a 就被被定义为 类A的一个对象

所以在寻找方法的时候会先去找参数的最小泛型(可能会是子类类型本身),如果 A 类中

没有找到该方法,就会去A 的父类中寻找!这个是泛型的向上;如果父类中也没有,就会尝

试向上泛型参数!如果在A中有适应的方法,则会去看看a对象的真实引用B中是否覆盖了A

中的这个方法,如果覆盖了,则会调用子类B中覆盖父类的方法







                              



相关推荐

    Java多态性探悉()

    本文将深入探讨Java多态性的概念、实现机制以及相关的编程规则。 一、基本概念 多态性意味着一个接口可以有多种不同的表现形式。在Java中,可以通过子类对象引用赋值给超类对象引用变量来实现这一特性。这意味着,...

    【Java编程教程】详解Java 多态性.pdf

    【Java编程教程】详解Java 多态性 Java 作为一门面向对象的编程语言,其核心特性之一就是多态性。多态性使得程序在设计上具有更高的灵活性和可扩展性,允许我们以多种方式执行相同的操作。多态性这个概念来源于希腊...

    java多态性详解——父类引用子类对象.pdf

    Java 多态性详解 —— 父类引用子类对象 多态性是 Java 面向对象编程的三个特征之一,另外两个是封装和继承。多态性是指通过方法的重写、重载和动态连接来实现的。在 Java 中,多态性是为了解决单继承问题而引入的...

    java多态性详解——父类引用子类对象

    在Java中,多态性允许我们使用一个类型的对象对另一个类型进行操作,只要这两个类型之间存在继承关系。 #### 方法的重写 方法的重写发生在子类中,当子类继承父类后,可以重新定义父类中的方法。这种情况下,当...

    Java-Java面向对象多态性教程

    多态性是面向对象编程的重要概念,它允许我们使用一个接口来表示多种类型的数据,从而增加了代码的灵活性和可重用性。在Java中,多态性的实现主要依赖于继承、接口和方法的覆盖。 1. 继承:Java中的类可以继承另一...

    多态性的理解

    多态性是面向对象编程中的一个重要特性,它使得一个接口或方法能够适用于多种类型的数据。在Java中,多态性主要通过方法重载(overloading)、方法重写(overriding)以及动态绑定来实现。 #### 二、面向对象编程三...

    使用Java多态性实现一个简单的动物园管理系统.txt

    ### 使用Java多态性实现一个简单的动物园管理系统的知识点解析 #### 一、抽象类与抽象方法 本系统中,`Animal`被定义为一个抽象类,这意味着它不能被实例化,仅能作为其他类的基础来扩展。抽象类的存在主要是为了...

    100个Java经典例子

    多态性则可以通过接口或抽象类来体现,比如定义一个Person接口,使得Student和Teacher都能实现。 文件和IO流也是Java的重要部分。例如,你可以看到如何读取和写入文本文件,使用FileReader、FileWriter,或者更高级...

    谈谈对Java多态性的一点理解

    Java的多态性是面向对象编程的一个核心概念,它允许我们设计更加灵活和可扩展的代码。多态性使得程序可以在不明确指定具体对象类型的情况下进行操作,这大大提高了代码的复用性和可维护性。在Java中,多态性的实现...

    java 基础练习题

    这个例子展示了多态性,尽管`animal`变量是`Animal`类型,但实际引用的是`Dog`对象,因此调用的`sound()`方法是`Dog`类中的版本。 3. **练习题** 在学习Java基础时,通过解决相关的练习题,可以加深对类继承和...

    Java面向对象(进阶)- 面向对象特征之三:多态性

    例如,设计一个宠物系统,可以有Dog、Cat等不同类型的宠物,而Person类中有一个`feed()`方法需要喂养宠物,这时就可以利用多态性,将参数定义为父类类型Pet,使得Person可以喂养任何类型的宠物,无需关心具体是Dog...

    Java对象的多态性汇编PPT教案学习.pptx

    在给定的PPT教案中,首先通过一个简单的例子来解释多态性。假设有一个`Teacher`基类,有子类`JavaTeacher`和`.NETTeacher`,它们都实现了`introduce()`和`teach()`方法。`TeacherManager`类中有一个`judge()`方法,...

    java_中关于_继承_的一个小例子.

    在Java编程语言中,继承是面向对象编程的一个核心特性,它允许一个类(子类或派生类)从另一个类(父类或基类)继承属性和方法,从而实现代码的复用和扩展。这个小例子可能是为了演示如何在Java中实现继承以及它所...

    JAVA代码大全的例子

    首先,Java的核心特性包括类、对象、封装、继承和多态性。在"代码大全的例子"中,你可能会找到关于如何定义和创建类的示例,以及如何通过对象来操作数据。封装是Java中保护数据的关键机制,你可以看到如何使用访问...

    Java多态性定义与用法实例详解

    "Java多态性定义与用法实例详解" 本文主要介绍了Java多态性定义与用法,详细分析了多态的概念、功能以及Java定义与实现面向对象多态性的相关操作技巧。 一、基本概念 多态性是指发送消息给某个对象,让该对象自行...

    Java源码小合集:继承和多态相关的例子.rar

    继承和多态的相关Java源码下载,比较散,像覆盖和重载、对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏、调用父类的方法...

    Java语言程序设计(第二版)\第05章 类的继承性与多态性.ppt

    如果我们有一个通用的`draw()`方法,那么通过父类`Point`的引用调用`draw()`,实际执行的是子类`Line`或`Circle`中的`draw()`方法,这就是多态性的一个体现。 总结,类的继承性和多态性是Java面向对象编程的重要...

    Java程序设计:chapter06 多态性.ppt

    Java程序设计中的多态性是面向对象编程的一个核心特性,它允许我们使用一个类的引用来调用子类的方法或访问子类的属性,从而实现更灵活和可扩展的代码设计。多态性体现在两个主要方面:静态多态(编译时多态)和动态...

    Java程序设计150个小例子

    这些例子将帮助理解如何创建和使用类,以及如何通过继承和多态性提高代码复用。 5. **异常处理**:Java提供了强大的异常处理机制,如try-catch-finally块和throw、throws关键字,例子会展示如何有效地处理运行时...

    java 多态的含义和例子经典讲解

    Java的多态性是面向对象编程的一个核心概念,它允许我们使用一个接口来表示不同的类。多态在Java中有着深远的影响,它提高了代码的可重用性、灵活性和可扩展性。本篇将通过一个经典例子深入解析多态的含义,并通过...

Global site tag (gtag.js) - Google Analytics