在抽象类中调用重写的函数

时间:2011-09-06 12:24:13

标签: java polymorphism abstract-class

所以我有abstract class Worker,它有抽象函数computePay

此课程的两个子课程为HourlyWorkerFixedWorker, 现在我已经在这两个类中提供了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运营商/关键字,但我不知道它会在这里有用吗?

3 个答案:

答案 0 :(得分:7)

是的,Java将确保调用“正确”方法。

无需使用instanceof进行手动分发。

  

我知道将会调用子类中的那个,但是哪一个?

你不需要知道basic concept of OOP。您正在编写抽象类中定义的接口,并且不需要知道这里使用的是哪个实现(或它做了什么)。

答案 1 :(得分:2)

  

我知道将会调用子类中的那个,但是哪一个?

对象的实际类型之一。因此,如果您的对象 一个HourlyWorker(使用new HourlyWorker()初始化),您将调用此类型的computePay方法。

instance of关键字用于测试对象是否为指定类型。它不应该用在好的设计中(除了覆盖equals)。这没用。相反,你应该按照你的建议依赖多态性。

答案 2 :(得分:0)

java中的方法默认是虚拟的(就像在CPP中你必须使用虚拟关键字一样),因此java将确保调用方法而不是引用。抽象方法是C ++的纯虚函数

另请注意,instanceof在这里不会有用,所以请避免使用。

相关问题