考虑以下程序:
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/