一般來說,這種情況下的第三方API設計的很糟糕。特別是如果你被允許改變它依賴的類...
但無論如何,如果你被允許改變類,你可以添加一個方法,如displayMe
(我假設你的第三方類被稱爲PersonPrinter
)。
abstract class Person {
abstract public void displayMe();
}
class Employee extends Person {
public void displayMe() {
PersonPrinter.display(this);
}
}
class Student extends Person {
public void displayMe() {
PersonPrinter.display(this);
}
}
由於每個類都知道它是什麼,它會從PersonPrinter
挑display
正確的版本。
現在你可以寫你的循環是這樣的:
List<Person> personList = new ArrayList<>();
personList.add(new Employee());
personList.add(new Student());
for (Person p : personList) {
p.displayMe();
}
爲什麼你有這些限制? –
問題是在這個迭代中你必須知道使用這兩種方法之一的特殊實現。一個更好的解決方案是你爲每個實現實現的接口'public interface PersonInterface {public void display(); }' – pL4Gu33
今天在接受採訪時我被問到了這個問題。自從我回家2個小時後,我想不出第三種方式。 :) –