§4.9.1 Base side inheritance

Generally, a callin binding affects all sub-types of its bound base. Specifically, if a role type R bound to a base type B defines a callin binding rm <- callin_modifier bm, the following rules apply:

(a) Effect on sub-classes

The callin binding also effects instances of any type BSub that is a sub-type of B. If BSub overrides the bound base method bm, the overridden version is generally affected, too. However, if bm covariantly redefines the return type from its super version, the callin binding has to explicitly specify if the covariant sub-class version should be affected, too (see §4.9.3.(b)).

(b) No effect on super-classes

The binding never affects an instance of any super-type of B even if the method bm is inherited from a super-class or overrides an inherited method. This ensures that dispatching to a role method due to a callin binding always provides a base instance that has at least the type declared in the role's playedBy clause.

For corresponding definitions regarding static methods see §4.7.(e).