Что такое интерфейс класса?

в настоящее время я работаю над завершением кода, и слово "интерфейс" продолжает появляться! Я пытаюсь понять, что такое интерфейс. Можете ли вы определить термин? Также, что на самом деле составляет "интерфейс класса"?

8 ответов


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

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

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

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


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

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

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

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

чаще всего интерфейсы также являются конкретными типами в языке, например в следующем, 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, поскольку он реализует правильный интерфейс.


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

технически, однако, они будут 2 разные вещи

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

interface ILogger
{
  void Log(String str);
}

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

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

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


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

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


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


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

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


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

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

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

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

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


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

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

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