簡體   English   中英

我應該在Java中使用不同的方法名稱還是重載參數?

[英]Should I use different method names or overload parameters in Java?

我在課堂上提出了兩種不同的方法來實現一些方法:

class Zoo {

    public void addTiger(Tiger tiger);
    public void addEmu(Emu emu);
    // ...
}

class Zoo {

    public void add(Tiger tiger);
    public void add(Emu emu);
}

我可以看到兩者之間的唯一區別是冗長-但是我是否缺少更根本的東西? 一種方法將來會使事情變得更困難嗎?

添加Tiger和添加Emu有什么區別? 為什么不建立動物界面?

我會做類似的事情:

class Tiger implements Animal { }

class Emu implements Animal { }

class Zoo {
    void add(Animal animal) { }
}

Zoo zoo = new Zoo();
zoo.add(new Tiger());
zoo.add(new Emu());

但是,這兩種方法不會有太大區別,因為違反SOLID原則,它們都是對還是錯。

如果將來您決定通過使Emu和Tiger都實現相同的接口或擴展相同的類來合並它們,則可以使用

class Zoo {

    public void add(Tiger tiger);
    public void add(Emu emu);
}

這將減輕您的工作負擔,因為您無需在使用方法的位置進行任何更改。
因此,是的,第一種方法將來可能會使事情變得更加困難。

根據您使用的上下文。

在這種情況下,老虎和E都是動物。 我更喜歡使用重載方法,這將是有道理的。 而且,如果Tiger和Emu都繼承自Animal類。 您可以聲明一個動物數組:

Animal[] zoo;

這個動物園里既有老虎又有E。 你可以這樣做 :

for (int i = 0; i < zoo.length; i++) {
    BigZoo.add(zoo[i]);
}

在OOP中,我們說這是多態性。

但是,如果這些東西是兩個不同的意思。 例如,服務器要添加兩件事: UserData 這說得通 :

addUser(User user);
addData(Data data);

而不是:

add(User user);
add(Data data);

希望這對您有所幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM