如何理解Java多态性?通过类型转换,把一个对象当作它的基类对象对待。 从相同的基类派生出来的多个派生预览类可被当作同一个类型对待,可对这些不同的类型进行同样的处理。
这些不同派生类的对象响应同一个方法时的行为是有所差别的,这正是这些相似的类之间彼此区别的不同之处。
动态绑定
将一个方法调用和一个方法主体连接到一起称为绑定(Binding)。 根据绑定的时机不同,可将绑定分为“早期绑定”和“后期绑定”两种。 如果在程序运行之前进行绑定(由编译器和链接程序完成),称为早期绑定。 如果在程序运行期间进行绑定,称为后期绑定,后期绑定也称为“动态绑定”或“运行时绑定”。 在Java中,多态性是依靠动态绑定实现的,即Java虚拟机在运行时确定要调用哪一个同名方法。
多态的应用
由于多态性,一个父类的引用变量可以指向不同的子类对象,并且在运行时根据父类引用变量所指向对象的实际类型执行相应的子类方法。 利用多态性进行二次分发。 利用多态性设计回调方法。
多态的例子
Shape类是几个具体图形类的父类
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("画矩形"); } }
Circle类也是Shape类的子类
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("画三角形"); } }
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();//同样的消息,不同的响应 } } }
|
分享到:
相关推荐
JAVA学习笔记,java知识点总结
多态--简单工厂
从虚拟机角度看Java多态->(重写override)的实现原理
【IT十八掌徐培成】Java基础第06天-03.多态-类多态-接口多态-同名属性问题.zip
多态2-20230614-193400.cpp
主要介绍了JAVA 多态操作----父类与子类转换问题,结合实例形式分析了JAVA 多态操作中父类与子类转换问题相关原理、操作技巧与注意事项,需要的朋友可以参考下
java 个人对于多态理解和一些笔记。
02 多态案例-计算器.cpp
java多态、继承练习题,包含题目与答案,............................................................................................................
Java ------ 多态作业
代码演示对java中多态的理解 从代码演示中更好的理解多态的作用
Java多态的讲解
java多态的基础知识,你可能了解,但是如何使用?内附例子。究竟如何实现,帮你学习基础。
【Java面试题】谈谈对Java多态的理解
多态
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析
多态 Polymorphism 马克-to-win java视频的详细介绍
多态 Polymorphism 马克-to-win java视频的详细的介绍
JAVA多态图文详解ppt,详细通过各种举例介绍JAVA多态的ppt