Привязка динамического метода в Java - PullRequest
1 голос
/ 31 июля 2011

С этим кодом

public static void doSomething(Animal arg)
{
...
}

Что из следующего является более правильным? (Они оба компилируются и работают нормально.) Есть ли разница?

public static void main(String[] args)
{
Animal fido = new Dog();
doSomething(fido);
}

или

public static void main(String[] args)
{
Dog fido = new Dog();
doSomething(fido);
}

Я не верю, что это имеет значение, но есть ли еще один условный? Благодаря.

Ответы [ 3 ]

3 голосов
/ 31 июля 2011

Это зависит от того, как вы используете этот объект позже в коде, если он может содержать другие Animal в остальной части кода, тогда оставьте его Animal для вызова этого метода (doSomething),это не имеет значения (поскольку Dog является Animal).

2 голосов
/ 31 июля 2011

Это зависит от вашего варианта использования. Если вам нужен доступ к семантике Dog, то вы должны использовать Dog, если вам нужна только семантика Animal, и вы хотите использовать общность Animal, вы должны использовать Animal.

0 голосов
/ 31 июля 2011

Как правило, мне нравится, чтобы типы были как можно более общими - это форма сокрытия информации.Даже когда тип используется только внутри класса или метода, сохранение общего типа уменьшает количество вещей, о которых вы должны подумать, когда на экземпляр этого типа ссылаются позже в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...