
在Java中,如果技巧重写并非一种名字空间的编写,那么它最多是使人觉得有趣,但没有实际价值,但状况只是那么。方法重写构造成了Java最大的一个概念基础:动态方式调度(dynamic method dispatch)。动态方式调度是一种机制,借助于这种模式,对一个已经重写的方式的调用将在运行时,而不是在编译时解析。动态方式调度更加重要,因为这关系到Java如何推动运行多态性的难题。我们了解,超类引用函数可以引用子类对象,Java使用这个事实来缓解在运行时对重写方法的调用。下面是运行原理:当一个超类引用调用一个重写方法时,Java根据在调用时被引用对象的类别执行什么版本的方式。换句话说,是被引用对象的类别(不是引用变量的类别)决定将执行什么版本的重写方法。因此,如果说超类包含一个被泛型重写的方式,那么当通过超类引用函数来引用不同类型的对象时,就会执行哪个方法的不同版本。演示如下:
public class ClassA {
void callme(){
System.out.println("Inside A's callme method");
}
}
public class ClassB extends ClassA{

void callme(){
System.out.println("Inside B's callme method");
}
}
public class ClassC extends ClassA{
void callme(){
System.out.println("Inside C's callme method");

}
}
public class Dispatch {
public static void main(String[] args) {
ClassA classA = new ClassA();
ClassB classB = new ClassB();
ClassC classC = new ClassC();

ClassA a = classA;
a.callme();
ClassB b = classB;
b.callme();
ClassC c = classC;
c.callme();
}

}
程序运行结果:
Inside A's callme method
Inside B's callme method
Inside C's callme method
重写方法允许Java支持运行时多态性。多态是面向对象编程的本质,它允许通用类指定方式动态方法调用 为什么不安全,这些原则对该类的所有派生类都是公用的,同时该办法还允许子类定义这种方式中的个别或全部的特定实现。重写方法是Java实现其多态性“一个接口,多个步骤”的另一种方式。
成功应用多态性的关键是应理解超类和泛型形成了从简洁到复杂的层次。为了恰当应用多态性,超类提供了泛型可以直接使用的所有元素。多态性也定义了派生类必须谋求自己的方式,这允许子类在深化一致接口的同时,灵活地定义他们自己的方式。因此动态方法调用 为什么不安全,通过同时使用继承跟重写方法,超类能够定义供其所有泛型使用的方式的通用形式。
运行时多态性是面向对象设计方式推动代码重用跟健壮性的更强悍机制之一,代码库在保持抽象接口同时不再次编译的状况下即调用新类的示例。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-144084-1.html
结果呢