If the property is a val, this can be permissible, as A and B (and other subclasses of A) are responsible for producing objects that agree with their override's type definition; but it breaks down if you can call a general setter and a specialised getter. And if your var property doesn't work like that, it might not be appropriate for it to be a property.