鑑於此代碼:的Java多態性/重載驚喜
class Task{};
class TaskA extends Task{};
class TopWorker{
//... omitting constructor, instance variables, etc.
public void work(Task task){
this.subWorkerA.work(task)
//followed by more subworkers...
}
}
class SubWorkerA{
public void work(TaskA task){
// Subworker A does something interesting here
}
public void work(Task task){
// Subworker A doesn't care, do nothing
}
}
TaskA task = new TaskA();
(new TopWorker).work(task);
我期望爲work()
的TaskA
簽名會,而不是called-,該Task
版本被調用。我認爲問題是TopWorker
只接受Task
,所以java必須相應地調度SubWorker.work()
。
有沒有辦法解決這個問題?假設我有很多Tasks
和許多工人,並且TopWorker
在那裏以協調他們的結果。
的方法過載被選擇在編譯時。所有編譯器都知道'task'是一個'Task',所以它知道它可以安全調用的唯一方法是'work(Task)'。 –