考虑以下程序:

class Bike{
   void run(){System.out.println("running");}
 }

class Splender extends Bike{

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

   void run2(){
        System.out.println("running2 safely with 60km");
   }

   public static void main(String args[]){
     Bike b = new Splender();//upcasting
     b.run2();
   }
 }

我的问题:
b.run2();

如何使用基类对象访问派生类的 run2 方法?
截至目前,它正在抛出编译错误:
242/Splender.java:12: error: cannot find symbol
     b.run2();
      ^
  symbol:   method run2()
  location: variable b of type Bike
1 error

最佳答案

分配 Bike b = new Splender(); 时,您将变量 b 分配为 Bike 类型。
要访问 Splender 的方法,您需要转换: ((Splender) b).run2();
正如我看到您的评论:实现接口(interface)会导致编译器不知道“专用”方法的相同编译“问题”,他只会知道接口(interface)方法。但是 Actor 也可以在那里工作。
避免这种情况的唯一方法是将 run2() 移动到与您的问题/用例相矛盾的界面

关于java - java中如何实现运行时多态性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56560777/

10-12 23:04