Статические поля и константы определяются также как и обычно, только в начале указывается ключевое слово static. Разница лишь в том, что статическое поле мы можем изменить извне обратившись к нему через класс.
Статические методы относятся ко всему классу и обычно высчитывают значения которые не влияют на внутренние поля класса.
// Статические переменные и методы класса
class MyStatic {
static const PI = 3.14159;
static int Cost = 2;
static void hi() => print ( 'Static Method' );
}
// Программа
void main ( ) {
print ( MyStatic.PI ); // 3.14159
print ( MyStatic.Cost ); // 2
MyStatic.Cost = 3;
print ( MyStatic.Cost ); // 3
MyStatic.hi(); // Static Method
}Абстрактные классы определяются с ключевым словом abstract и не отличаются от обычных, за исключением того что мы не можем напрямую создавать объект такого класса через конструктор.
Абстрактные методы могут быть описаны только в абстрактных классах и не имеют тела. Важно также учитывать что все классы наследуемые от абстрактного с подобными методами обязаны их реализовать, т.е. назначить тело метода.
// Абстрактный класс c абстрактным методом
abstract class AbstractContainer {
void updateChildren();
}
class MyClass extends AbstractContainer {
void updateChildren() {
print ( 'updateChildren' );
}
}
// Программа
void main ( ) {
var abstractValue = MyClass ( );
abstractValue.updateChildren(); // updateChildren
}