我应该在Java中使用不同的方法名称或重载参数吗?

时间:2013-04-21 18:10:03

标签: 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);
}

我能看到的两者之间的唯一区别是冗长 - 但我错过了一些更基本的东西吗?一种方法将来会让事情变得更加困难吗?

3 个答案:

答案 0 :(得分:4)

添加Tiger和添加Emu有什么区别?为什么不制作一个Animal界面?

我会做类似的事情:

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原则,它们同样是对或错的。

答案 1 :(得分:1)

如果将来您决定合并Emu和Tiger,使它们实现相同的接口或扩展相同的类,并因此合并这两种方法,使用

class Zoo {

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

将减轻您的工作,因为您不需要在使用您的方法的地方更改任何内容 所以,是的,第一种方法可能会在未来使某些事情变得更加困难。

答案 2 :(得分:0)

基于您正在使用的上下文。

在这种背景下,Tiger和Emu都是Animal。我更喜欢使用重载方法,它会有意义。而且,如果Tiger和Emu都继承自Animal类。你可以声明一个动物数组:

Animal[] zoo;

这个动物园都包含Tiger和Emu。你可以这样做:

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);

希望这可以帮助你:)