-1

我正在研究运行时多态性,我找到了一个这样的例子

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();
   }
}

这里 Bike 类对象 b 可以访问 Splender 的方法 run 没问题,那么我们可以访问 Bike 的 run() 方法吗?如果是,那怎么办?如果不是那为什么?

4

1 回答 1

0

不,它. Splender您使用 的实例Splender,因此将使用它的方法版本。

但是,您可以在覆盖它时访问它。

@Override
void run() {
    super.run();
    System.out.println("running safely with 60km");
}

8.4.8.1。覆盖(通过实例方法)

可以使用包含关键字的方法调用表达式(第 15.12 节)来访问被覆盖的方法super限定名称或对超类类型的强制转换在尝试访问被覆盖的方法时无效。

于 2019-09-12T10:12:12.327 回答