Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtOpImMB 53 of 113 menu
◀ ▶

Свои тела методов в Dart

Метод в контракте задает имя, параметры и тип результата. Если тела нет, реализацию пишут в классе с implements. Сигнатура в классе должна совпадать с контрактом, включая типы параметров:

class MathOps { int sum(int a, int b); int subtract(int a, int b); }

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

class SimpleMath implements MathOps { int sum(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } }

Слово implements не копирует готовое тело из контракта. Даже если у другого класса метод уже с телом, в реализации все равно пишут свою версию команды:

class Printable { void show(); } class Post implements Printable { String title = ""; void show() { print(title); } }

Контракт может описывать не только методы, но и геттеры. Геттер без тела в контракте класс реализации задает через поле, параметр конструктора или явный get:

class Named { String get name; } class Person implements Named { String name; Person(this.name); }

Геттер только для чтения объявляют через get, изменяемое свойство - через get и set или через публичное поле, если контракт это допускает:

class Labeled { String get label; String get caption; } class Tag implements Labeled { String label; Tag(this.label); String get caption { return "label: $label"; } }

Если в контракте указаны и чтение, и запись, класс должен предоставить оба доступа - обычно через свое поле:

class Counter { int get value; set value(int v); } class MutableCounter implements Counter { int value = 0; }

Сделайте класс Converter, в котором будут методы toUpper и toLower. Пусть оба метода принимают параметр типа String и возвращают String.

Сделайте класс TextConverter, который будет реализовывать класс Converter.

Сделайте класс Identifiable. Пусть в контракте будет геттер id типа int только для чтения.

Сделайте класс Product, который будет реализовывать класс Identifiable. Значение id передавайте параметром конструктора.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить