2016-02-07 4 views
0

Может существовать интерфейс Java, который будет реализован методом, а не классом?Предоставляет ли Java интерфейсы для методов?

Мой профессор спросил, существуют ли интерфейсы Java для методов, и студенты в значительной степени единогласно ответили «нет». Профессор сказал нам, что нам нужно пересмотреть интерфейсы.

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

+0

Не уверен, что у меня есть ваш вопрос, но, похоже, вы спрашиваете о методах по умолчанию (https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html), которые были введены с версии 8 –

+0

Возможно, он пытался понять функциональные интерфейсы. Тем не менее, функциональные интерфейсы по-прежнему определяют контракт для семейства типов, как это делают обычные интерфейсы. «Функциональные интерфейсы реализуются методом, а не классом», возможно, был его точкой зрения, но для меня это не совсем верно. – scottb

ответ

0

Я сделал то, что должно было быть очевидным, что: я спросил моего профессора разъяснений. Кажется, я слишком много читаю в ее словах; когда она сказала, что мы должны идти обзор интерфейсов, она просто имела в виду именно это. Она никогда не говорила, что мы ошибались; кажется, что, строго говоря, интерфейсов для методов нет. Но я многому научился из всех этих ответов - спасибо.

0

Интерфейсы задают методы, а в Java 8 могут быть реализованы по умолчанию. Я подозреваю, что это вопрос того, как вы интерпретировали и перефразировали слова своего инструктора. Возможно, он имел в виду новый функциональный интерфейс Java 8 «функциональный интерфейс». Вы должны исследовать это.

0

Это звучит как ваши слова профессора, если вы выбрали плохо, или вы неправильно поняли некоторые из вещей, которые он сказал. Я могу себе представить, что он говорил об анонимных классах, где вы можете написать в реализации линейных интерфейсов, таких как:

ActionListener listener = new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     // do stuff 
    } 
} 

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

1

Может существовать интерфейс Java, который будет реализован методом, а не классом?

Ваше заявление о проблеме не ясности.

Вы ищете пример, когда класс не реализует интерфейс, а метод в этом классе обеспечивает реализацию?

Один пример:

executor.submit(new Runnable(){ 
       public void run(){ 
        System.out.println("Thread Name in Runnable:"+ 
             Thread.currentThread().getName()); 
       } 
      }); 

В этом example,

Мой главный класс в явном виде не процитировать, что implements Runnable интерфейс, но it simply implemented run() method of Runnable interface.

EDIT:

Если ваш профессор говорит о новых возможностях интерфейса в java 8, посмотрите на это oracle documentation page. С помощью этой новой функции методов по умолчанию интерфейс имеет тело в методах, то есть они обеспечивают реализацию по умолчанию для некоторых методов.

Некоторые важные замечания по методам по умолчанию:

Продление интерфейсам, которые содержат по умолчанию методы

При расширении интерфейс, который содержит метод по умолчанию, вы можете сделать следующее:

  1. Не упоминайте метод по умолчанию, который позволяет вашему расширенному интерфейсу наследовать метод по умолчанию.
  2. Redeclare метод по умолчанию, который делает его абстрактным.
  3. Переопределить метод по умолчанию, который переопределяет его.

Особенно посмотреть на «Extending Interfaces That Contain Default Methods» в оракул странице документации и это article

+0

Я думаю, что более вероятно, что мой профессор имел в виду методы по умолчанию, чем внедрение метода из интерфейса, потому что она уже спрашивала о последнем. Однако она также сказала, что нам нужно знать Java 7 для класса, что подразумевает, что знание особенностей Java 8 является необязательным. –

+0

Я обновил свой ответ несколькими точками по умолчанию. Но методы по умолчанию вводятся только в java 8. –

Смежные вопросы