public class DeliverySystem {
public static void main(String[] args) {
Staff me = new partTimeStaff()
me.CalcSalary();
me.CalcBonus();
}
}
class partTimeStaff extends Staff{
public void CalcBonus(){..........}
}
class Staff{
public void CalcSalary() {….........}
}
为什么此代码中存在错误,如何解决此错误?
答案 0 :(得分:2)
calcBonus()
对象无法使用Staff
方法。因为您使用多态来使partTimeStaff
对象适合Staff
引用,所以该对象只能调用Staff
中存在的方法。
我将尝试用一个简单的例子来解释它:
假设我是一名汽车修理工。我对汽车一无所知。我的一位客户给我带了他的车(福特金牛座)并要求将其送去维修。我知道如何维修汽车,所以这没问题。但后来他要我修理汽车中的收音机,这是特定的制造和型号。我不知道该怎么做。我对福特Tauruses(Tauri?)一无所知。我知道所有汽车的用途,但我对汽车的具体类型一无所知。
答案 1 :(得分:2)
Java是一种静态类型语言。这意味着它必须知道在编译时可用的方法和变量。当你这样做
Staff me = new partTimeStaff()
你告诉java我'我'是一个'员工'对象(尽管实际上它是partTimeStaff对象)。因此,编译器只知道' me'可以执行Staff函数(CalcSalary),而不是partTimeStaff函数(CalcBonus)。
为了使代码能够正常工作,您需要做:
partTimeStaff me = new partTimeStaff()
或
Staff me = new partTimeStaff()
me.CalcSalary();
((partTimeStaff) me).CalcBonus();
后者是一个显式的强制转换(告诉编译器我实际上是一个partTimeStaff对象
答案 2 :(得分:0)
CalcBonus不是员工的方法。对象me虽然被实例化为partTimeStaff的对象,但它具有Staff类型,因此只能访问Staff方法。如果你添加一个演员如下,它可以访问partTimeStaff方法:
((partTimeStaff) me).CalcBonus();