多态的目的
通过类型转换,把一个对象当作它的基类对象对待。
从相同的基类派生出来的多个派生类可被当作同一个类型对待,可对这些不同的类型进行同样的处理。
这些不同派生类的对象响应同一个方法时的行为是有所差别的,这正是这些相似的类之间彼此区别的不同之处。
动态绑定
将一个方法调用和一个方法主体连接到一起称为绑定(Binding)。
根据绑定的时机不同,可将绑定分为“早期绑定”和“后期绑定”两种。
如果在程序运行之前进行绑定(由编译器和链接程序完成),称为早期绑定。
如果在程序运行期间进行绑定,称为后期绑定,后期绑定也称为“动态绑定”或“运行时绑定”。
在Java中,多态性是依靠动态绑定实现的,即Java虚拟机在运行时确定要调用哪一个同名方法。
多态的应用
由于多态性,一个父类的引用变量可以指向不同的子类对象,并且在运行时根据父类引用变量所指向对象的实际类型执行相应的子类方法。
利用多态性进行二次分发。
利用多态性设计回调方法。
多态的例子
Shape类是几个具体图形类的父类
package cn.edu.uibe.poly;
public class Shape {
public void draw(){
System.out.println("Shape.draw()");
}
}
package cn.edu.uibe.poly;
public class Shape {
public void draw(){
System.out.println("Shape.draw()");
}
}
Rectangle类是Shape类的一个子类
package cn.edu.uibe.poly;
public class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("画矩形");
}
}
package cn.edu.uibe.poly;
public class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("画矩形");
}
}
Circle类也是Shape类的子类
package cn.edu.uibe.poly;
public class Circle extends Shape{
@Override
public void draw() {
System.out.println("画圆");
}
}
package cn.edu.uibe.poly;
public class Circle extends Shape{
@Override
public void draw() {
System.out.println("画圆");
}
}
Triangle类是Shape类的另外一个子类
package cn.edu.uibe.poly;
public class Triangle extends Shape{
@Override
public void draw() {
System.out.println("画三角形");
}
}
package cn.edu.uibe.poly;
public class Triangle extends Shape{
@Override
public void draw() {
System.out.println("画三角形");
}
}
ShapeDemo类中随机生成矩形、圆、三角形,然后用Shape类型的引用调用。
package cn.edu.uibe.poly;
import java.util.*;
public class ShapeDemo {
Random rand = new Random();
public Shape createShape(){
int c = rand.nextInt(3);
Shape s = null;
switch(c){
case 0:
s = new Rectangle();
break;
case 1:
s = new Circle();
break;
case 2:
s = new Triangle();
break;
}
return s;
}
public static void main(String[] args) {
ShapeDemo demo = new ShapeDemo();
Shape[] shapes = new Shape[10];
for(int i=0;i<shapes.length;i++){
shapes[i] = demo.createShape();
}
for(int i=0;i<shapes.length;i++){
shapes[i].draw();//同样的消息,不同的响应
}
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/microtong/archive/2009/11/04/4769597.aspx
这是我看到的对多态性理解最深刻的文章了
分享到:
相关推荐
总结一下,这个“java多态性练习”将带你深入理解Java中的多态性和抽象类。通过实际的代码示例和分析,你将学会如何在自己的项目中有效地应用这些概念,以实现更高效、更灵活的代码设计。这个练习对于任何希望提升...
Java多态性是面向对象编程中的一个重要概念,它在Java中起到了关键的作用,使得程序更加灵活,可扩展性更强。本实验将深入探讨Java多态性的核心原理与应用。 首先,我们要理解多态性的基本含义。多态性...
### Java多态性实验知识点解析 #### 实验背景与目的 本次实验主要目的是让学生通过实践操作,深入理解Java中的多态性概念,并掌握如何利用多态性实现代码的灵活性和可扩展性。实验中,学生将通过编写一个处理复数...
### 多态性的理解 #### 一、多态性概述 多态性是面向对象编程中的一个重要特性,它使得一个接口或方法能够适用于多种类型的数据。在Java中,多态性主要通过方法重载(overloading)、方法重写(overriding)以及...
本文将深入探讨Java多态性的概念、实现机制以及相关的编程规则。 一、基本概念 多态性意味着一个接口可以有多种不同的表现形式。在Java中,可以通过子类对象引用赋值给超类对象引用变量来实现这一特性。这意味着,...
要理解多态性,首先要知道什么是“向上转型”。向上转型是指使用父类类型的引用指向子类的对象。例如,Animal a = new Cat(); 这里,Animal 是父类,Cat 是子类,a 是 Animal 类型的引用,指向了 Cat 类型的对象。 ...
深入理解 Java 多态性 在 Java 编程语言中,多态性是指一个对象可以有多种形式的能力,具体来说就是一个对象可以有多个不同的类形态。多态性是面向对象程序设计代码重用的一个最强大机制,Java 多态性的概念也可以...
【Java编程教程】详解Java 多态性 Java 作为一门面向对象的编程语言,其核心特性之一就是多态性。多态性使得程序在设计上具有更高的灵活性和可扩展性,...理解并熟练掌握多态性,对于编写高质量的Java代码至关重要。
对于JAVA多态性的理解是非常好的帮助,多态性是JAVA中常用的性质
Java的多态性是面向对象编程(OOP)的三大特性之一,它允许程序设计者以通用的方式处理不同的数据类型,增强了代码的复用性和灵活性。本文将深入探讨Java中的多...理解并掌握多态性是成为高级Java程序员的关键步骤之一。
Java 基础知识:多态性 Java 语言是一种面向对象的编程语言,多态性是其核心特性之一。多态性是指同一个方法在不同对象上具有不同的行为。...希望读者通过本文的学习,能够深入理解和灵活应用 Java 中的多态性特性。
Java的多态性是面向对象编程的一个核心概念,它允许我们设计更加灵活和可扩展的代码。多态性使得程序可以在不明确指定具体对象类型的情况下...在实际开发中,理解和熟练运用多态性是成为一名优秀的Java程序员的关键。
一个Java项目,以演示和理解Java中的多态性和继承。 该项目使用Java 7。 ###如何使用? 这是一个eclipse项目,因此要从eclipse中执行以下步骤以导入该项目: eclipse > file > import > existing projects into ...
Java是一种广泛使用的面向对象编程语言,其面向对象的特性之一就是多态性。多态性是面向对象编程的重要概念,它允许我们使用一个接口来表示多种类型的数据,从而增加了代码的灵活性和可重用性。在Java中,多态性的...
Java多态性涉及到的关键词包括:extends(继承)、implements(实现接口)、abstract(抽象类和方法)、virtual(虚函数,C++中的概念)、Override(覆盖)、Overloading(重载)、Encapsulation(封装)等。理解多...
本文件“Java运行时多态性的实现.txt”很可能是详细解释这一主题的文档,虽然具体内容无法在此直接提供,但我可以为你总结和扩展相关的Java多态性知识。 1. **类的继承**:在Java中,一个类可以继承另一个类,形成...
在Java编程语言中,面向对象的三大特性包括封装、继承和多态性。本文将重点讨论面向对象特征之三:多态性。多态性(Polymorphism)是程序设计中的一种重要概念,...理解和掌握多态性对于编写高质量的Java代码至关重要。
这个例子展示了多态性,尽管`animal`变量是`Animal`类型,但实际引用的是`Dog`对象,因此调用的`sound()`方法是`Dog`类中的版本。 3. **练习题** 在学习Java基础时,通过解决相关的练习题,可以加深对类继承和...
要深刻理解Java的类和多态性,我们必须首先对形式化方法有所了解。形式化方法作为计算机科学中的一个基础分支,它包含语法形式化和语义形式化两个重要方面。语法形式化在计算机语言的发展初期就已出现,其主要关注点...
多态性是面向对象编程的核心特性之一,它允许相同的消息被不同类型的对象接收时执行不同的行为,从而提高代码的灵活性和可复用性。...理解和掌握这两种语言的多态性实现机制对于编写高效且灵活的面向对象程序至关重要。