I made the same assumption... Matthew's counter-example did trigger an unhappy memory of another way we can go directly to the outer field:
$ scalac -Xprint:expl /Users/adriaan/Library/Preferences/IdeaIC2016.1/scratches/scratch_8 -uniqid
package <empty>#4 {
class A#6619 extends Object#168 {
def <init>#6774(): A#6619 = {
A#6619.super.<init>#2315();
()
};
final class B#6775 extends Object#168 {
def <init>#14049($outer#15956: A#6619.this.type): A#6619.this.B#6775 = {
B#6775.super.<init>#2315();
()
};
scala#24.Predef#1340.println#6404(B#6775.this.$outer#15955); // normally uses the outer accessor, unless the class is final
<synthetic> <paramaccessor> <artifact> private[this] val $outer#15955: A#6619.this.type = _;
<synthetic> <stable> <artifact> def $outer#15954(): A#6619.this.type = B#6775.this.$outer#15955
}
}
}