Переменные экземпляра
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 7 из 110.
Переменные экземпляра — это переменные, объявленные внутри класса. Каждый объект, созданный на основе класса, получает собственную копию этих переменных, независимую от всех остальных объектов.
Объявляйте переменные экземпляра с указанием типа и необязательным значением по умолчанию:
class Student {
String school = 'Dart Academy'; // имеет значение по умолчанию
String name = ''; // пустое значение по умолчанию
int age = 0; // нулевое значение по умолчанию
}Переменные со значениями по умолчанию начинаются с одного и того же значения для каждого нового объекта. Переменные, такие как name и age, остаются пустыми или равными нулю, пока вы их не установите.
Используйте метод с this для установки данных отдельного объекта:
class Student {
String school = 'Dart Academy';
String name = '';
int age = 0;
void setInfo(String name, int age) {
this.name = name; // this.name = переменная экземпляра
this.age = age; // this.age = переменная экземпляра
}
}Создайте студентов и присвойте им данные:
Student student1 = Student();
Student student2 = Student();
student1.setInfo('Alice', 20);
student2.setInfo('Bob', 22);Обращайтесь к переменным экземпляра с помощью оператора точки:
print('${student1.name} is ${student1.age} at ${student1.school}');
print('${student2.name} is ${student2.age} at ${student2.school}');Вывод:
Alice is 20 at Dart Academy
Bob is 22 at Dart AcademyОбратите внимание, что school одинаково для обоих объектов, поскольку оно имеет значение по умолчанию, в то время как name и age уникальны для каждого объекта, поскольку они были установлены индивидуально через setInfo.
Задание
ЛегкоЗавершите класс Student в файле student.dart:
- Объявите переменную экземпляра
String schoolсо значением по умолчанию'Dart Academy' - Объявите переменную экземпляра
String nameсо значением по умолчанию'' - Объявите переменную экземпляра
int ageсо значением по умолчанию0 - Добавьте метод
setInfo, который принимаетString nameиint ageв качестве параметров и устанавливает их для объекта, используяthis
Файл driver.dart протестирует ваш класс, создав двух студентов и выведя их информацию (заблокировано).
Шпаргалка
Переменные экземпляра — это переменные, объявленные внутри класса. Каждый объект получает свою собственную копию этих переменных.
Объявляйте переменные экземпляра с указанием типа и необязательным значением по умолчанию:
class Student {
String school = 'Dart Academy'; // имеет значение по умолчанию
String name = ''; // пустое значение по умолчанию
int age = 0; // нулевое значение по умолчанию
}Используйте метод с ключевым словом this для установки данных конкретного объекта:
class Student {
String school = 'Dart Academy';
String name = '';
int age = 0;
void setInfo(String name, int age) {
this.name = name; // this.name = переменная экземпляра
this.age = age; // this.age = переменная экземпляра
}
}Создавайте объекты и присваивайте им данные:
Student student1 = Student();
Student student2 = Student();
student1.setInfo('Alice', 20);
student2.setInfo('Bob', 22);Обращайтесь к переменным экземпляра с помощью оператора «точка»:
print('${student1.name} is ${student1.age} at ${student1.school}');
// Output: Alice is 20 at Dart AcademyПопробуйте сами
import 'student.dart';
void main() {
Student student1 = Student();
Student student2 = Student();
student1.setInfo('Alice', 20);
student2.setInfo('Bob', 22);
print('${student1.name} is ${student1.age} at ${student1.school}');
print('${student2.name} is ${student2.age} at ${student2.school}');
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыБиблиотеки и импортВведение в ООПКлассы и объектыКлючевое слово thisМетодыПеременные экземпляраОсновы конструкторовИтоги — Простой калькулятор4Null-безопасность
Введение в Null-безопасностьNullable и Non-Nullable типыОператоры ? и !Ключевое слово Late и Null-безопасностьNull-aware операторыNull-безопасность в классахИтоги — Система профилей пользователей7Абстрактные классы и интерфейсы
Абстрактные классыАбстрактные методыИнтерфейсы в DartНеявные интерфейсыРеализация против наследованияМножественные интерфейсыИтоги — Калькулятор фигур10Коллекции и обобщения
Обзор List, Set, MapТипобезопасные коллекцииОбобщенные классыОбобщенные методыОграничения обобщенийIterable и IteratorИтоги: Обобщенное хранилище13Продвинутые концепции ООП
Композиция против наследованияМетоды расширенияВызываемые классыЗапечатанные классы (Dart 3)Записи (Dart 3)Паттерны и сопоставление (3.0)Перечисления с методами16Проект: Управление библиотекой
Обзор проектаКлассы Book и User2Конструкторы в Dart
Конструктор по умолчаниюИменованные конструкторыСписки инициализацииКонстантные конструкторыФабричные конструкторыПеренаправляющие конструкторыИтоги — Shape Builder5Инкапсуляция
Публичные и приватные членыСоглашение о префиксе _Приватность на уровне библиотекГеттеры и сеттеры: подробный разборСкрытие данныхИтоги — Записи о студентах8Mixins
Введение в MixinsСоздание MixinsИспользование нескольких MixinsКлючевое слово on в MixinsMixin и наследованиеMixin и интерфейсИтоги: Система животных11Специальные методы
Переопределение toString()Переопределение hashCode и ==Интерфейс ComparableМетод call()Переопределение noSuchMethodПовторение — Пользовательская коллекция14Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy3Свойства классов
Члены экземпляра и статические членыПоля Final и ConstПеременные LateСтатические методы и поляГеттеры и сеттерыИтоги — Менеджер банковского счета6Наследование
Основы наследованияКлючевое слово superПереопределение методовАннотация @overrideКлючевое слово final для классовКонструкторы и наследованиеИтоги: Иерархия сотрудников9Полиморфизм
Основы полиморфизмаПолиморфизм через интерфейсыПроверка типов во время выполненияОператоры is и asКлючевое слово covariantИтоги — Обработчик платежей12Асинхронное ООП
Futures и async/awaitОсновы StreamsКонтроллеры StreamАсинхронные конструкторыАсинхронность в методах классовИтоги — Data Fetcher15Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий