你庆祝节日或好事的方式和父母一样吗?还是稍有不同?也许庆祝同样的节日或事件,会用自己独特的方式。类似的,类能够继承其他类的行为。但是它们也能够重新定义继承的行为——也称方法覆盖。
方法覆盖是面向对象编程语言的特征,它使派生类能够定义从基类集成的方法实现,以扩展自己的行为。派生类能够通过定义具有相同方法原型或方法名称、数量和参数类型的实例方法,覆盖实例基类中定义的方法。被覆盖的方法也与多态方法作用相同。基类的静态方法不能覆盖,但能够用相同的原型定义隐藏在派生类。
能被派生类覆盖的方法叫做虚拟方法。但是注意:Java 已经弃用此词,在 Java 词汇中没有“虚拟方法”一说。该词用在其它面向对象语言中,如 C 和C++。虚拟方法调用是指调用基于对象引用的类型正确地被覆盖方法,而不是调用对象引用本身。虚拟方法在运行时确定,而非在编译时。
OCPJava SE 7 程序员认证II考试会考查方法覆盖;方法覆盖的正确语法;重载、覆盖和隐藏方法之间的区别;运用覆盖方法时的一般错误;以及虚拟方法调用。让我们从方法覆盖开始。
注:基类方法指被覆盖的方法、派生类方法指覆盖方法。