package Ġcourse . kotlin . deleg ation Ċ Ċ interface ĠBase Ġ{ ĊĠĠĠ Ġfun Ġprint () Ċ } Ċ Ċ class ĠBase Impl ( val Ġx : ĠInt ) Ġ: ĠBase Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprint () Ġ{ Ġprint ( x ) Ġ} Ċ } Ċ Ċ class ĠDerived ( b : ĠBase ) Ġ: ĠBase Ġby Ġb Ċ Ċ fun Ġmain 1 () Ġ{ ĊĠĠĠ Ġval Ġb Ġ= ĠBase Impl ( 1 0 ) ĊĠĠĠ ĠDerived ( b ). print () Ġ// Ġ 1 0 Ċ } Ċ Ċ // Ġdemo Ġ 2 Ċ interface ĠBase 2 Ġ{ ĊĠĠĠ Ġfun Ġprint Message () ĊĠĠĠ Ġfun Ġprint Message Line () Ċ } Ċ Ċ class ĠBase Impl 2 ( val Ġx : ĠInt ) Ġ: ĠBase 2 Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprint Message () Ġ{ Ġprint ( x ) Ġ} ĊĠĠĠ Ġoverride Ġfun Ġprint Message Line () Ġ{ Ġprintln ( x ) Ġ} Ċ } Ċ Ċ class ĠDerived 2 ( b : ĠBase 2 ) Ġ: ĠBase 2 Ġby Ġb Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprint Message () Ġ{ Ġprint (" abc ") Ġ} Ċ } Ċ Ċ fun Ġmain 2 () Ġ{ ĊĠĠĠ Ġval Ġb Ġ= ĠBase Impl 2 ( 1 0 ) ĊĠĠĠ ĠDerived 2 ( b ). print Message () Ġ// Ġabc ĊĠĠĠ ĠDerived 2 ( b ). print Message Line () Ġ// 1 0 Ċ } Ċ Ċ // Ġover rid en Ġmembers Ġnot Ġvirtual Ċ interface ĠBase 3 Ġ{ ĊĠĠĠ Ġval Ġmessage : ĠString ĊĠĠĠ Ġfun Ġprint () Ċ } Ċ Ċ class ĠBase Impl 3 ( val Ġx : ĠInt ) Ġ: ĠBase 3 Ġ{ ĊĠĠĠ Ġoverride Ġval Ġmessage Ġ= Ġ" Base Impl : Ġx Ġ= Ġ$ x " ĊĠĠĠ Ġoverride Ġfun Ġprint () Ġ{ Ġprintln ( message ) Ġ} Ċ } Ċ Ċ class ĠDerived 3 ( b : ĠBase 3 ) Ġ: ĠBase 3 Ġby Ġb Ġ{ ĊĠĠĠ Ġ// ĠThis Ġproperty Ġis Ġnot Ġaccessed Ġfrom Ġb 's Ġimplementation Ġof Ġ` print ` ĊĠĠĠ Ġoverride Ġval Ġmessage Ġ= Ġ" Message Ġof ĠDerived " Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġb Ġ= ĠBase Impl 3 ( 1 0 ) ĊĠĠĠ Ġval Ġderived Ġ= ĠDerived 3 ( b ) ĊĠĠĠ Ġderived . print () ĊĠĠĠ Ġprintln ( derived . message ) Ċ } Ċ