// ĠTARGET _ BACKEND : ĠJVM Ċ // ĠJVM _ TARGET : Ġ 1 . 8 Ċ // ĠFILE : Ġkt 4 3 2 1 7 . kt Ċ class ĠA Ġ{ ĊĠĠĠ Ġprivate Ġval Ġb Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠDouble Expression () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtest : ĠDouble Expression Ġ= Ġb Ċ } Ċ Ċ class ĠC Ġ: ĠDouble Expression () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget () Ġ= Ġ 0 . 0 Ċ } Ċ Ċ fun Ġbox (): ĠString Ġ{ ĊĠĠĠ Ġif Ġ( A (). test . get () Ġ!= Ġ 0 . 0 ) Ġthrow ĠAssertionError (" A (). test . get () Ġ!= Ġ 0 . 0 ") ĊĊĠĠĠ Ġif Ġ( C (). get () Ġ!= Ġ 0 . 0 ) Ġthrow ĠAssertionError (" C (). get () Ġ!= Ġ 0 . 0 ") ĊĊĠĠĠ Ġreturn Ġ" OK " Ċ } Ċ Ċ // ĠFILE : ĠDouble Expression . java Ċ import Ġorg . jetbrains . annotations . NotNull ; Ċ Ċ public Ġabstract Ġclass ĠDouble Expression Ġimplements ĠObservable Double Ġ{ ĊĠĠĠ Ġ@ NotNull ĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġpublic ĠObject Ġis EqualTo ( double Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠFILE : ĠObservable Value . java Ċ import Ġorg . jetbrains . annotations . NotNull ; Ċ Ċ public Ġinterface ĠObservable Value < T > Ġ{ ĊĠĠĠ Ġ@ NotNull ĊĠĠĠ ĠT Ġget (); ĊĊĠĠĠ Ġ@ NotNull ĊĠĠĠ Ġdefault ĠObject Ġis EqualTo (@ NotNull ĠT Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠFILE : ĠObservable Double . java Ċ import Ġorg . jetbrains . annotations . NotNull ; Ċ Ċ public Ġinterface ĠObservable Double Ġextends ĠObservable Value < Double > Ġ{ ĊĠĠĠ Ġ@ NotNull ĊĠĠĠ ĠObject Ġis EqualTo ( double Ġvalue ); Ċ } ĊĊ