我正在研究运行时多态性,我找到一个这样的例子
class Bike {
void run() {
System.out.println("running");
}
}
class Splender extends Bike {
void run(){
System.out.println("running safely with 60km");
}
public static void main(String args[]){
Bike b = new Splender (); //upcasting
b.run();
}
}
这里自行车类对象 b 可以访问 Splender 的方法运行它没问题, 那么我们可以访问 Bike 的 run(( 方法吗?如果是,那如何?如果不是,那为什么?
不,它被Splender
覆盖了。您使用Splender
的实例,因此将使用该方法的版本。
但是,您可以在覆盖它时访问它。
@Override
void run() {
super.run();
System.out.println("running safely with 60km");
}
8.4.8.1. 覆盖(通过实例方法(
可以使用包含关键字
super
的方法调用表达式 (§15.12( 访问重写的方法。限定名或对超类类型的强制转换在尝试访问重写的方法时无效。