Spec-Zone .ru
спецификации, руководства, описания, API
|
functionDefinition и variableDeclaration охватываются в их соответствующих главах. Остающиеся элементы class покрываются ниже.
initBlock является дополнительным блоком кода, который выполняется как заключительный шаг инициализации экземпляра.
postInitBlock является дополнительным блоком кода, который выполняется после того, как инициализация экземпляра завершилась.
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