【向上转型和动态方法调度有什么用 向上转型的意义及其实现方式】多态有什么用?马 克 - t o - w i n:我给大家想了两个需求: 1)要求程序运行起来以后,如果用户输入自行车,就执行自行车的驾驶方法 。如果用户输入小轿车,就执行小轿车的驾驶方法 。这是就用到父类指针指向子类时的 override 。2)如果你有一千个子类 。要求你依次执行这一千个子类当中的打印 。你当然可以一个一个实例化子类后分别执行 。马克-to-win:累也累死了,你可以编一个循环 。用通用的基类指向所有的派生类 。几行程序即可,你可以参照本节的例子 。不用这技术, 还真解决不了这问题!
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203 。
Polymorphism means one type,many form
Dynamic method binding(dynamic method dispatch),方法覆盖仅在两个方法的名称和类型声明都相同时才发生(override) 。
动态方法调度(dynamic method dispatch)是一种在运行时而不是编译时调用方法的机制 。
动态方法调度也是Java实现运行时多态性的基础 。马克-to-win:要想实现多态,父类和子类必须同时拥有这个同名函数 。否则实现不了多态, 底下给出了例子,说明这点 。note that when
1)base pointer point to derived class to realize dynamic dispatching,an important requirement is that you also need to
have the same-name method in the base class.refer to the following example of SuperClass.
抽象类和非抽象类二者都可以用来创建对象引用,马克-to-win:用来指向一个子类对象,实现多态 。note that abstract and non-abstract class both can dynamically bind for example the following example.
例1.8.1---本章源码
abstract class FigureMark {
double dime1;
double dime2;
/*这里的构造函数,是为子类调用使的,不是用来实例化的 。马克-to-win: constructor is for subclass's constructor's calling, not for
instantiating. */
FigureMark(double a, double b) {
dime1 = a;
dime2 = b;
}
// area is now an abstract method
abstract void area();
}
class RectangleMark extends FigureMark {
RectangleMark(double a, double b) {
super(a, b);
}
// 覆盖
void area() {
System.out.println("四边形" + dime1 * dime2);
篇幅有限更多请见扩展链接:http://www.mark-to-win.com/tutorial/java_3_PointPolymorphism.html
- MVP和FMVP到底哪一个更高? fmvp是什么意思
- 【爱历史】唐王朝萧瑀勇于仗义执言,受到李世民赞美的眼光和精神
- 小米手机别乱买 我不想买小米手机
- 小米12系列真是首选 小米系统12和11哪个好
- 延安起名(图文)
- 【爱历史】刘备的五虎上将和卧龙凤雏算不算好牌?无法统一天下是因为什么?
- 楼盘风水的布局和禁忌
- 肾结石和酒有关系吗 肾结石酒能喝么
- 冰酒和红酒有什么区别知识普及 蓝莓冰酒一般都是什么成分
- 自制葡萄酒益处 酿葡萄酒的渣有什么用