所以我有abstract class Worker
,它有抽象函数computePay
。
此课程的两个子课程为HourlyWorker
和FixedWorker
,
现在我已经在这两个类中提供了computePay
的实现。现在我的代码说
Worker[] w=new worker[2];
w[0]=new HourlyWorker;
w[1]=new FixedWorker;
现在当我说w[0].computePay
我怎么确定调用哪个computePay,
我知道将会调用子类中的那个,但是哪一个?
即。
如果我的两个子类具有computePay
函数的不同实现,
以下代码会给我想要的结果吗?
w[0].computePay //Prints the pay as per the implementation in HourlyWorker;
w[1].computePay //Prints the pay as per the implementation in FixedWorker;
我也听说过instance of
运营商/关键字,但我不知道它会在这里有用吗?
答案 0 :(得分:7)
是的,Java将确保调用“正确”方法。
无需使用instanceof进行手动分发。
我知道将会调用子类中的那个,但是哪一个?
你不需要知道basic concept of OOP。您正在编写抽象类中定义的接口,并且不需要知道这里使用的是哪个实现(或它做了什么)。
答案 1 :(得分:2)
我知道将会调用子类中的那个,但是哪一个?
对象的实际类型之一。因此,如果您的对象 一个HourlyWorker
(使用new HourlyWorker()
初始化),您将调用此类型的computePay
方法。
instance of
关键字用于测试对象是否为指定类型。它不应该用在好的设计中(除了覆盖equals
)。这没用。相反,你应该按照你的建议依赖多态性。
答案 2 :(得分:0)
java中的方法默认是虚拟的(就像在CPP中你必须使用虚拟关键字一样),因此java将确保调用方法而不是引用。抽象方法是C ++的纯虚函数
另请注意,instanceof在这里不会有用,所以请避免使用。