Элементы класса

 Рисунок 5.3. classMember

classMember

functionDefinition и variableDeclaration охватываются в их соответствующих главах. Остающиеся элементы class покрываются ниже.

Блок init

 Рисунок 5.4. initBlock

initBlock

initBlock является дополнительным блоком кода, который выполняется как заключительный шаг инициализации экземпляра.

Блок postinit

 Рисунок 5.5. postinitBlock

postinitBlock

postInitBlock является дополнительным блоком кода, который выполняется после того, как инициализация экземпляра завершилась.

Переменное Объявление Переопределения

 Рисунок 5.6. variableOverrideDeclaration

variableOverrideDeclaration

variableOverrideDeclaration позволяет изменять значение по умолчанию var экземпляра подкласса и/или добавлять onReplaceClause для того var. Или initializingExpression или onReplaceClause или оба должны присутствовать. Отметьте, что, в то время как initializingExpression переопределяет значение по умолчанию, onReplaceClause добавляет блок, который будет выполняться на обновлении - любой onReplaceClause, определенный в подклассе, также выполняется на изменении к переменной - это является критическим для того, чтобы поддержать инварианты подкласса..

Функциональное Определение Переопределения

Можно изменить определение функции экземпляра в подклассе, переопределяя функцию, используя модификатор переопределения.

Здесь мы переопределяем определение приветствия функции в подклассе Sub:

class Base {
   function greeting() : Void { 
      println("Hi")
   }
}

class Sub extends Base {
   override function greeting() : Void { 
      println("Howdy")
   }
}

def b = Base {};
def s = Sub {};

b.greeting();
s.greeting();

Это печатает:

Hi
Howdy

Методы Java могут также быть переопределены, Например, чтобы измениться, как объект печатается его toString (), метод может быть переопределен:

class Point { 
   var x : Number; 
   var y : Number; 
   override function toString() : String {
      "Point {x}, {y}"
   } 
} 

def p = Point {x: 4.6 y: 8.9 };
println( p );

Это печатает

Point 4.6, 8.9




Spec-Zone.ru - all specs in one place