package Ġextension _ function _ properties Ċ Ċ /* ĊĠĠĠ Ġ// ĠLet 's Ġlook Ġat Ġextension Ġof Ġa Ġfunction Ġor Ġproperty Ġof Ġa Ġclass . ĊĠĠĠ Ġ// ĠData Ġclass : ĠKotlin 's Ġway Ġof Ġconcise Ġimmutable Ġclass ĊĠĠĠ Ġ// Ġlets Ġapply Ġextension Ġand Ġadd Ġa Ġnew Ġmethod Ġto Ġit Ġoutside Ġof Ġthe Ġclass Ġin Ġanother Ġfunction Ċ Ġ*/ Ċ Ċ enum Ġclass ĠComplex ity Level ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠE ASY (" Easy "), ĠMED IUM (" Medium "), ĠCOMP LEX (" Complex "), ĠHEL P (" Help ") Ċ } Ċ Ċ sealed Ġclass ĠEntity () Ġ{ ĊĠĠĠ Ġ// data Ġclasses Ġbut Ġcan Ġbe Ġnormal Ġclasses Ġtoo ĊĠĠĠ Ġ// ĠKotlin 's Ġway Ġof Ġconcise Ġimmutable Ġclass ĊĠĠĠ Ġdata Ġclass ĠEasy ( val Ġid : ĠString , Ġval Ġname : ĠString ) Ġ: ĠEntity () ĊĠĠĠ Ġdata Ġclass ĠMedium ( val Ġid : ĠString , Ġval Ġname : ĠString ) Ġ: ĠEntity () ĊĠĠĠ Ġdata Ġclass ĠComplex ( val Ġid : ĠString , Ġval Ġname : ĠString , Ġval Ġmultiplier : ĠFloat ) Ġ: ĠEntity () ĊĊĠĠĠ Ġ// a Ġgeneric Ġstatic Ġhelp Ġentity ĊĠĠĠ Ġobject ĠHelp Ġ: ĠEntity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġ" Help " ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ // ĠExtension Ġof Ġa Ġclass Ġby Ġadding Ġa Ġfunction Ċ fun ĠEntity . Medium . getNew String Representation () Ġ{ ĊĠĠĠ Ġprint (" Print ing ĠEntity . Medium :[ id : Ġ$ id , Ġname :$ name ] Ġ${ System . line Separator () }") Ċ } Ċ Ċ // Ġproperty Ġextension Ċ /* ĊĠĠĠ ĠWe Ġhave Ġto Ġsupport Ġthe Ġproperty Ġby Ġproviding Ġa Ġbacking Ġfield , Ġhence Ġthe Ġget () Ġ= Ġ" wh atever Ġwe Ġwant " Ċ Ġ*/ Ċ val ĠEntity . Easy . a New Property : ĠString ĊĠĠĠ Ġget () Ġ= Ġ" new Ġvalue " Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġentity Medium : ĠEntity Ġ= ĠEntity . Medium (" id ", Ġ" medium ") ĊĠĠĠ Ġ// using Ġextended Ġfunction ĊĠĠĠ ĠEntity . Medium (" id ", Ġ" medium "). getNew String Representation (); ĊĊĠĠĠ Ġ// Ġthis Ġwon 't Ġwork Ġsince Ġentity 2 Ġis Ġof Ġtype ĠEntity ĊĠĠĠ Ġ// ĠĠĠ Ġentity 2 . getNew String Representation () ĊĊĠĠĠ Ġif ( entity Medium Ġis ĠEntity . Medium ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġgoing Ġto Ġwork ĊĠĠĠĠĠĠĠ Ġentity Medium . getNew String Representation () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// using Ġextended Ġproperty ĊĠĠĠ Ġval Ġeasy : ĠEntity . Easy Ġ= Ġ ĠEntity . Easy (" id ", Ġ" medium "); ĊĠĠĠ Ġprintln (" The Ġnew Ġfield Ġhas Ġvalue : Ġ${ easy . a New Property }") Ċ } ĊĊ