多态的目的
通过类型转换,把一个对象当作它的基类对象对待。
从相同的基类派生出来的多个派生类可被当作同一个类型对待,可对这些不同的类型进行同样的处理。
这些不同派生类的对象响应同一个方法时的行为是有所差别的,这正是这些相似的类之间彼此区别的不同之处。
动态绑定
将一个方法调用和一个方法主体连接到一起称为绑定(Binding)。
根据绑定的时机不同,可将绑定分为“早期绑定”和“后期绑定”两种。
如果在程序运行之前进行绑定(由编译器和链接程序完成),称为早期绑定。
如果在程序运行期间进行绑定,称为后期绑定,后期绑定也称为“动态绑定”或“运行时绑定”。
在Java中,多态性是依靠动态绑定实现的,即Java虚拟机在运行时确定要调用哪一个同名方法。
多态的应用
由于多态性,一个父类的引用变量可以指向不同的子类对象,并且在运行时根据父类引用变量所指向对象的实际类型执行相应的子类方法。
利用多态性进行二次分发。
利用多态性设计回调方法。
多态的例子
Shape类是几个具体图形类的父类
view plaincopy to clipboardprint?
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类的一个子类
view plaincopy to clipboardprint?
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类的子类
view plaincopy to clipboardprint?
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类的另外一个子类
view plaincopy to clipboardprint?
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类型的引用调用。
view plaincopy to clipboardprint?
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();//同样的消息,不同的响应
}
}
}
分享到:
相关推荐
对于JAVA多态性的理解是非常好的帮助,多态性是JAVA中常用的性质
一个Java项目,以演示和理解Java中的多态性和继承。 该项目使用Java 7。 ###如何使用? 这是一个eclipse项目,因此要从eclipse中执行以下步骤以导入该项目: eclipse > file > import > existing projects into ...
本文带您通过几个类的示例和讲解来理解Java多态性,Java多态性的概念也可以被说成“一个接口,多个方法
多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中...
熟练使用多态性是程序设计者运用面向对象方法进行程序设计的关键,而理解多态性实现机制则是...为充分理解多态性的实现机制,采用比较方法,深入分析比较了C++和java的多态性在使用方法、要点、内部实现流程以及实现...
通过深入理解和掌握Java多态性,可以提升面试者的编程能力和解决问题的能力,从而在面试中展现出更高水平。本文适合准备Java面试的开发者系统学习和巩固多态性相关的知识,提升面试竞争力。为准备面试的开发者提供了...
多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、...
主要介绍了Java中多态性的实现方式,什么是多态?通过简单的一道题目帮大家理解java多态性,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
如果你没写,Java会给你补上一个默认的构造函数。 3) 左边的 “Vehicle veh1”创建了一个Vehicle类引用变量。所谓Vehicle类引用,就是以后可以用来指向Vehicle对象的对象引用。 4)“=”操作符使对象引用指向刚创建...
我们创建一个接口 Shape,定义一个空的方法 draw(),那么所有的实现类都必须实现这个方法,假设 Shape 有两个实现类:Triangle 和 Rectangle,我们虽然无法通过类似这样的 Java 代码来诠释 PHP 的多态性: ...
中文版 chm格式 ...本教程假设您熟悉 Java 语言和基本的面向对象概念,如:多态性、继承和封装。对“统一建模语言(UML)”有一定的理解也是有益的,但不是必需的;本教程将对这些基础知识做一些介绍。
多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的...
1、面向对象的特征有哪些方面?...多态性分为编译时的多态性和运行时的多态性。 总共90多道题目,包含面向对象、算法、多线程等面试题及详解 大厂面试题集,纯人工手写,分享不易,有问题敬请谅解 。。。。。。。。
主要java中接口,继承以及抽象等基础内容的实例,实初学者能刚好的理会多态的具体含义
清楚如何通过向上转型(引用的隐式转型),方法重写,运行期绑定来实现多态性。 体会多态性如何使系统可扩展和可维护。 理解运行时判定引用对象的类型(instanceof),进行强制转型(即引用的显示转型...
除了构造方法之外,父类的所有 方法和属性都被子类的对象继承 多态性是不同的实例对象以不同的方式对相同的信息作出不同的表现 访问修饰符用于确定访问类成员的方式 Java 常用修饰符有 static、final、abstract 接口...
020607_【第6章:面向对象(高级)】_对象的多态性笔记.pdf 020608_【第6章:面向对象(高级)】_instanceof关键字笔记.pdf 020609_【第6章:面向对象(高级)】_抽象类与接口的应用笔记.pdf 020610_〖第6章:面向...
4 10多态性 4 11abstract类和abstract方法 4 12super关键字 4 13接口 4 13 1接口的声明与使用 4 13 2理解接口 4 13 3接口回调 4 13 4接口做参数 4 14内部类 4 15匿名类 4 15 1和类有关的匿名类 4 15 2和接口有关的...
深入理解Java中向上转型对象体现的多态,以及面向对象思想
3、IO操作:对于大部分的自学者而言,IO操作也许是最难过的一个坎了,如果没有很好的理解抽象类和接口的概念,那么要想充分的理解IO操作是很难的,在整个IO操作之中,完整的体现了Java语言多态性的设计思想,而且在...