вопрос про java интерфейсы - PullRequest
       9

вопрос про java интерфейсы

1 голос
/ 26 октября 2008

Допустим, у меня есть следующий код рубина:


def use_object(object)
  puts object.some_method
end

, и это будет работать на любом объекте, который отвечает на some_method , верно?

Предполагая, что существует следующий интерфейс Java:


interface TestInterface {
   public String some_method();
}

Правильно ли я предполагаю, что интерфейсы являются способом достижения той же цели в Java (с той лишь разницей, что тип параметра будет TestInterface )?

Ответы [ 6 ]

1 голос
/ 26 октября 2008

Нет, интерфейсы в не реализованы. Вы можете иметь несколько реализаций этого.

Интерфейс будет выглядеть примерно так:

interface TestInterface {
   public String some_method();
}

И это может быть реализовано в классе:

public class TestClass implements TestInterface {
   public String some_method() {
       return "test";
   }
}

И, возможно, больше классов, которые реализуют этот метод по-разному. Все классы, которые реализуют интерфейс, должны реализовывать методы, объявленные интерфейсом.

С интерфейсами вы не можете достичь точно такого же, как в вашем примере Ruby, поскольку Java имеет статическую типизацию.

1 голос
/ 26 октября 2008

Вы правы, за исключением того, что вы не можете определить тело функции в интерфейсах Java, только прототипы.

Интерфейсы являются единственным способом реализации псевдо-мульти-деривации в Java, так как нормальная деривация класса проста (только один родитель).

0 голосов
/ 27 октября 2008

Похоже, вы пытаетесь программировать на Ruby с использованием Java, вы хотите переосмыслить свой подход, чтобы больше использовать идиомы языка.

0 голосов
/ 26 октября 2008

Да, но только если вы хотите абстрагировать «что-либо, имеющее some_method ()», как отдельную концепцию. Если у вас есть только один класс с функцией some_method (), вам не нужно указывать интерфейс, и параметром use_object () будет этот класс.

Также обратите внимание, что в Java мы используем camelCase вместо имен с подчеркиванием.

0 голосов
/ 26 октября 2008

В Java интерфейсы могут использоваться только для объявления методов, но не для их определения (реализации). Только классы могут реализовывать методы. Но классы могут реализовывать интерфейсы. Например, вы можете использовать шаблон адаптера, чтобы реализовать то же самое, что вы сделали в ruby.

0 голосов
/ 26 октября 2008

Java-интерфейсы определяют сигнатуры методов, которые должен предоставлять реализующий класс. JavaDoc объясняет все это очень подробно.

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