-1

我想出了两种不同的方法来在我的类中实现一些方法:

class Zoo {

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

class Zoo {

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

我可以看到,两者之间的唯一区别是冗长——但我是否遗漏了一些更基本的东西?一种方法会使将来的事情变得更加困难吗?

4

3 回答 3

4

添加老虎和添加鸸鹋有什么区别?为什么不做一个 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原则。

于 2013-04-21T18:11:46.363 回答
1

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

class Zoo {

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

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

于 2013-04-21T18:19:22.150 回答
0

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

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

Animal[] zoo;

这个动物园里有老虎和鸸鹋。你可以这样做 :

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

在 OOP 中,我们说这是多态性。

但是,如果那些东西是两个不同的意思。例如,A 服务器有两件事要添加:UserData. 这说得通 :

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

而不是:

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

希望这对你有帮助:)

于 2013-04-21T18:28:45.080 回答