Что такое интерфейс класса? - PullRequest
8 голосов
/ 20 июня 2009

В настоящее время я работаю над Code Complete, и слово «interface» продолжает появляться! Я пытаюсь понять, что такое интерфейс. Можете ли вы определить термин? И что на самом деле составляет "интерфейс класса"?

Ответы [ 8 ]

8 голосов
/ 20 июня 2009

В общем, интерфейс - это просто "как класс выглядит для остального мира".

Например, этот класс в Java:

class MyClass {
  private string data;
  private string Foo() {...}
  public void Bar(string s){...}
}
Можно сказать, что

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

Чаще всего интерфейсы также являются специфическими типами в языке, например, в следующем MyClass реализует интерфейс IMyClass:

interface IMyClass {
  public void Bar(string s);
}

class MyClass implements IMyClass {
  private string data;
  private string Foo() {...}
  public void Bar(string s){...}
}

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

8 голосов
/ 20 июня 2009

Я думаю, что хороший способ определить интерфейс таков:

Интерфейс - это контракт, определяющий набор методов, полей и свойств, которые будут доступны для любого объекта реализации

Реальная реализация от языка к языку может иметь небольшие забавные различия, но принцип верен.

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

1 голос
/ 20 июня 2009

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

Интерфейс может включать в себя как данные, так и функции.

1 голос
/ 20 июня 2009

Это внешнее лицо мира. Обычно это набор открытых методов (членов), которые он предоставляет.

Технически, однако это были бы две разные вещи

Интерфейс будет публичным контрактом. например,

interface ILogger
{
  void Log(String str);
}

Затем класс «реализует» этот интерфейс - таким образом, говоря, что он предоставляет эту функциональность

class ConsoleLogger : ILogger
{
  public ConsoleLogger() { ... }
  public void Log(String str)
  {
    Console.WriteLine("Console Logger " + str);
  }
  // private stuff
}

Пользователям этого сервиса / интерфейса не нужно заботиться о том, как он реализован или кто его реализует? В зависимости от интерфейса фактическая реализация может переключаться по желанию.

0 голосов
/ 25 мая 2017

Классическим примером интерфейса в реальной жизни является управление автомобилем.

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

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

0 голосов
/ 24 августа 2016

Интерфейсы имеют два определения. Это зависит от того, в каком контексте используется термин «интерфейс».

  1. Интерфейс классов относится ко всем реализованным публичным методам класса.
  2. Интерфейс как Тип. то есть используя ключевое слово interface для объявления интерфейса.

    interface Movable{ 
        moveStraight();
        moveLeft();
        moveRight();
        stop();
    }
    

    Итак, теперь класс, допустим, Car может реализовать интерфейс Movable. Это то, что известно как контракт. Если класс Car реализует интерфейс Movable, Car гарантирует предоставление реализаций для всех методов, объявленных в Movables. декларация.

В заключение, обычно интерфейс рассматривается как тип (определение 2) в контексте программирования конкретного языка. Вы найдете первое определение в меньшем количестве случаев, как правило, в теоретическом или дизайнерском контексте.

0 голосов
/ 30 сентября 2015

Интерфейс похож на класс, но не совсем. У него есть подобные черты, как у класса, но это не интерфейс. Интерфейс имеет переменные и методы, «как и класс, но методы, объявленные в интерфейсе, по умолчанию являются абстрактными (только сигнатура метода, без тела)».

http://beginnersbook.com/2013/05/java-interface/

0 голосов
/ 20 июня 2009

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

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