Андрей Кейда
Андрей Кейда
(обновлено )
За все время: 9599 просмотров, 3840 посетителей.
За последние 30 дней: 21 просмотр, 17 посетителей.

Основы Dart 2.x (Классы и объекты) Часть II

Наследование

void main (){

Toyota carina = Toyota();

carina.engine_type = "DIESEL";

carina.display();

}

class Cars{

String engine_type;

void display(){

print("Name: $engine_type");

}

}

class Toyota extends Cars

{

// Мы можем использовать поле engine_type, с помощью обьекта класса Toyota

}


class Cars{

void display(){

print("Cars");

}

}

class Toyota extends Cars

{

void parents(){

super.display();

}

}


Dart не поддерживает множественное наследование как например С++, для того что бы избежать многих проблем связвнных с этим, например совпадение имен переменных и методов у предков класса и неоднозначности пути наследования в случае более чем двухуровневой иерархии. Но как альтернатива множественному наследованию в Dart выступают интерфейсы и миксины .
Интерфейсы
- Интерфейсы не содержат какой-либо реализации, но обеспечивают общий тип всем имплементациям (реализациям) всем дочерним классам. Для интерфейсов в Dart нет отдельного ключевого слова, это обычный класс, как правило - абстрактный.
Наследуется интерфейс ключевым словом implements.

// Обычный интерфейс.

class CarsInterface {

void car_print(); // Метод который должен быть реализован в дочерних классах

}


// Реализация интерфейса для класса Toyota

class Toyota implements CarsInterface{


void car_print(){ // Реализация метода интерфейса

print("RAV4");

}

}


Полиморфизм

void main() {

Child obj_c = new Child();

obj_c.meth(8);

}

class Parent {

void meth(int a){

print("value of a ${a}");

}

class Child extends Parent {

@override // Проявление полиморфизма

void meth(dynamic b) { // Изменяем реализацию метода базового класса

print("value of b ${b}");

}

}


abstract class Magic { // Абстрактный класс


void what_do_you_want(); // Определение абстрактного метода.

}


class Execution extends Magic {

void what_do_you_want() {

print("Хочу Тойоту !!!") // Реализация абстрактного метода

}

}


Инкапсуляция

Инкапсуляция — свойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента (что у него внутри), а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные с помощью спецификаторов доступа private, protected, internal - Но в Dart спецификаторов доступа как таковых нет, а приватные поля класса начинается с подчеркивания "_", но инкапсуляция реализуется с помощью геттеров и сеттеров.
Getters и Setters
- Геттеры и сеттеры — это специальные методы, которые обеспечивают доступ для чтения и записи свойств объекта. Напомним, что каждая переменная класса определяет геттер, и (если это возможно) — сеттер. Вы можете создать дополнительные свойства для реализации геттеров и сеттеров, используя ключевые слова get и set:

class Student {

String name;

int age;


String get stud_name {

return name;

}


void set stud_name(String name) {

this.name = name;

}


Геттеры и сеттеры применяются во многих языках программирования (C++/C#/Java/Ruby)

Подборка заметок