Подтвердить что ты не робот

Как определить интерфейсы в Dart?

В Java у меня может быть интерфейс IsSilly и один или несколько конкретных типов, которые его реализуют:

public interface IsSilly {
    public void makePeopleLaugh();
}

public class Clown implements IsSilly {
    @Override
    public void makePeopleLaugh() {
        // Here is where the magic happens
    }
}

public class Comedian implements IsSilly {
    @Override
    public void makePeopleLaugh() {
        // Here is where the magic happens
    }
}

Что эквивалентно этому коду в Dart?

После просмотра официальных документов по классам, похоже, что Дарт не имеет нативного типа interface. Итак, как средний Dartisan выполняет принцип сегрегации интерфейса?

4b9b3361

Ответ 1

В Dart есть концепция неявных интерфейсов.

Каждый класс неявно определяет интерфейс, содержащий все элементы экземпляра класса и любые интерфейсы, которые он реализует. Если вы хотите создать класс A, который поддерживает API класса B без наследования реализации Bs, класс A должен реализовывать интерфейс B.

Класс реализует один или несколько интерфейсов, объявив их в предложении implements, а затем предоставив API-интерфейсы, требуемые интерфейсами.

Таким образом, ваш пример можно перевести в Dart следующим образом:

abstract class IsSilly {
  void makePeopleLaugh();
}

class Clown implements IsSilly {
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}

class Comedian implements IsSilly {
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}

Ответ 2

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

abstract class IsSilly {
    void makePeopleLaugh();
}

class Clown implements IsSilly {

    void makePeopleLaugh() {
        // Here is where the magic happens
    }

}

class Comedian implements IsSilly {

    void makePeopleLaugh() {
        // Here is where the magic happens
    }

}

Ответ 3

Обычно путаница заключается в том, что не существует слова "интерфейс", такого как Java и другие языки. Объявления классов сами по себе являются интерфейсами в Dart.

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

abstract class IsSilly {
  void makePeopleLaugh();
}

//Abstract class
class Clown extends IsSilly {   
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}

//Interface
class Comedian implements IsSilly {
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}