package Ġio . github . pak 3 nu h . kotlin . playground . basics . b 1 _ structures Ċ Ċ import Ġjava . util . function . Supplier ĊĊ Ċ /* Ċ * -------- ĠInterfaces Ċ * ĠAn Ġinterface Ġin ĠKotlin Ġis Ġexactly Ġthe Ġsame Ġas Ġin ĠJava , Ġit Ġis Ġthe Ġmost Ġde coup led Ġunit Ġof Ġcode Ġwe Ġcan Ġspecify . Ċ * Ċ * ĠA ĠKotlin Ġinterface Ġcan Ġdefine Ġproperties Ġ( not Ġfields ) Ġand Ġfunctions , Ġabstract Ġor Ġdefault , Ġinherit Ġother Ġinterfaces , Ċ * Ġmuch Ġlike Ġa ĠJava Ġinterface . Ċ */ Ċ interface ĠPhone Ġ{ ĊĠĠĠ Ġval ĠphoneNumber : ĠLong ĊĠĠĠ Ġfun Ġcall ( number : ĠLong ) ĊĠĠĠ Ġfun Ġcall Self () Ġ{ ĊĠĠĠĠĠĠĠ Ġcall ( phoneNumber ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /* Ċ * ĠIn ĠKotlin Ġwe Ġmust Ġexplicitly Ġimplement Ġan Ġinterface Ġexcept Ġwith Ġone Ġexception , Ġan Ġinterface Ġwith Ġa Ġsingle Ġabstract Ċ * Ġmethod Ġ( known Ġas ĠFunctional Interface Ġin ĠJava ). Ċ * Ċ * ĠFor Ġcompatibility Ġreasons , Ġif Ġthe Ġinterface Ġis Ġdefined Ġin ĠJava , Ġthe ĠSAM Ġconversion Ġis Ġapplied Ġautomatically , Ġotherwise Ċ * Ġthe Ġinterface Ġmust Ġbe Ġexplicitly Ġmarked Ġas Ġ` fun `. Ċ * Ċ * ĠFor ĠSAM Ġconversions Ġwe Ġneed Ġto Ġprefix Ġthe Ġexpression Ġwith Ġth a Ġname Ġof Ġthe Ġinterface Ċ Ġ*/ Ċ val Ġjava Supplier : ĠSupplier < Int > Ġ= ĠSupplier Ġ{ Ġ 1 Ġ} Ċ Ċ fun Ġinterface ĠK Supplier < T > Ġ{ ĊĠĠĠ Ġfun Ġget (): ĠT Ċ } Ċ val Ġkotlin Supplier : ĠK Supplier < Int > Ġ= ĠK Supplier Ġ{ Ġ 1 Ġ} Ċ Ċ /* Ċ * ĠIn Ġthe Ġend , ĠSAM Ġconversions Ġwork Ġin Ġa Ġvery Ġsimilar Ġto Ġobject Ġexpressions , Ġbut Ġwith Ġa Ġmuch Ġmore Ġn icer Ġsyntax . Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠImplementation Ġclasses Ġ[ Triangle Impl ] Ġand Ġ[ Circle Impl ] Ġcan 't Ġchange Ġtheir Ġpublic ĠAPI . ĠYou Ġare Ġonly Ġallowed Ġto Ġchange Ċ Ġ* Ġmodifiers Ġor Ġimplement Ġnon Ġpublic Ġcode . Ċ Ġ* Ċ Ġ* ĠChange Ġthe Ġinterfaces Ġso Ġthat Ġeach Ġproperty Ġand Ġfunction Ġis Ġdefined Ġin Ġtheir Ġrespective Ġplaces . ĠIt Ġshould Ġbe Ċ Ġ* Ġpossible Ġto Ġcreate Ġnew Ġimplementations Ġjust Ġby Ġrespect ing Ġthe Ġinterface Ġhierarchy . Ċ Ġ*/ Ċ interface ĠShape Ġ{ ĊĠĠĠ Ġfun Ġarea (): ĠDouble Ċ } Ċ interface ĠTriangle : ĠShape Ġ{ ĊĠĠĠ Ġval Ġbase : ĠInt ĊĠĠĠ Ġval Ġheight : ĠInt ĊĠĠĠ Ġoverride Ġfun Ġarea (): ĠDouble Ġ= Ġ( base Ġ* Ġheight ). toDouble () Ġ/ Ġ 2 Ċ } Ċ interface ĠCircle : ĠShape Ġ{ ĊĠĠĠ Ġval Ġradius : ĠInt ĊĠĠĠ Ġoverride Ġfun Ġarea (): ĠDouble Ġ= ĠMath . PI Ġ* Ġradius Ġ* Ġradius ĊĠĠĠ Ġfun Ġper imeter (): ĠDouble Ċ } Ċ Ċ class ĠTriangle Impl ( override Ġval Ġbase : ĠInt , Ġoverride Ġval Ġheight : ĠInt ): ĠTriangle Ċ class ĠCircle Impl ( override Ġval Ġradius : ĠInt ) Ġ: ĠCircle Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġper imeter (): ĠDouble Ġ= Ġ 2 Ġ* ĠMath . PI Ġ* Ġradius Ċ } Ċ