package Ġnick son Ċ Ċ /* Ġmy Ġnotes Ġon ĠClasses Ġand ĠInherit ance Ġin ĠKotlin Ċ Ġ* Ġ- ĠA ĠKotlin Ġclass Ġhas Ġone Ġprimary Ġconstructor , Ġand Ġone Ġor Ġmore Ġsecondary Ġconstructors Ċ Ġ* Ġ- ĠInitial izer Ġcode Ġcan Ġbe Ġplaced Ġin Ġ' initializer Ġblocks ' Ġwhich Ġare Ġprefixed Ġby Ġ' init ' Ġkeyword Ċ Ġ* Ġ- ĠInitial izer Ġblocks Ġare Ġexecuted Ġin Ġthe Ġsame Ġorder Ġas Ġthey Ġappear Ġin Ġthe Ġclass Ġbody Ċ Ġ* Ġ*/ Ċ Ċ class ĠPerson Plain ( firstName : ĠString ) Ċ Ċ class ĠInit O der Demo ( name : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġfirst Property Ġ= Ġ" First Ġproperty : Ġ$ name ". also (:: println ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" First ĠInitial izer Ġblock Ġthat Ġprints Ġ${ name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsecond Property Ġ= Ġ" Second Ġproperty Ġ${ name . length }". also (:: println ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Second Ġinitializer Ġblock Ġthat Ġprints Ġ${ name . length }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /* Ġ- ĠNote Ġthat Ġparameters Ġof Ġthe Ġprimary Ġconstructor Ġcan Ġbe Ġused Ġin Ġthe Ġinitializer Ġblocks Ċ Ġ* Ġ- ĠThey Ġcan Ġalso Ġbe Ġused Ġin Ġproperty Ġinitializer Ġdeclared Ġin Ġthe Ġclass Ġbody Ċ Ġ* Ġ*/ Ċ Ċ class ĠCustomer ( name : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġcustomer Key Ġ= Ġname . toUpperCase () Ċ } Ċ Ċ /* Ġ- ĠThe ĠKotlin Ġway Ġfor Ġdeclaring Ġand Ġinitializing Ġproperties Ġis Ġconcise */ Ċ class ĠStudent ( val ĠfirstName : ĠString , Ġval ĠlastName : ĠString , Ġvar Ġage : ĠInt ) Ċ Ċ /* ĠSecondary ĠConstructor Ċ Ġ* Ġ- ĠA Ġclass Ġcan Ġalso Ġdeclare Ġa Ġsecondary Ġconstructors Ġwhich Ġare Ġprefixed Ġwith Ġkeyword Ġ" constructor " */ Ċ Ċ class ĠAnother Person Ġ{ ĊĠĠĠ Ġvar Ġchildren : ĠMutable List < Another Person > Ġ= Ġmutable ListOf < Another Person >() ĊĊĠĠĠ Ġconstructor ( parent : ĠAnother Person ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent . children . add ( this ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠConstructor Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Init Ġblock ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( i : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Constructor ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /* ĠInherit ance Ċ Ġ* Ġ- ĠAll Ġclasses Ġin ĠKotlin Ġhave Ġa Ġcommon ĠSuper Class : ĠAny Ċ Ġ* Ġ- ĠAny Ġhas Ġ 3 Ġmethods : Ċ Ġ* ĠĠĠĠĠ Ġ- Ġequals () Ċ Ġ* ĠĠĠĠĠ Ġ- ĠhashCode () Ċ Ġ* ĠĠĠĠĠ Ġ- ĠtoString () Ċ Ġ* Ġ*/ Ċ Ċ class ĠExample Ġ// Ġimplicitly Ġinherits Ġfrom ĠAny Ċ Ċ /* ĠTo Ġdeclare Ġan Ġexplicit Ġsup ertype , Ġplace Ġthe Ġtype Ġafter Ġthe Ġcolon Ġin Ġthe Ġclass Ġheader */ Ċ open Ġclass ĠBase ( p : ĠInt ) Ċ class ĠDerived ( p : ĠInt ) Ġ: ĠBase ( p ) Ċ /* Ġ' open ' Ċ Ġ* Ġ- ĠThe Ġ' open ' Ġannotation Ġon Ġa Ġclass Ġis Ġthe Ġopposite Ġof ĠJava 's Ġ' final ': Ġit Ġallows Ġothers Ġto Ġinherit Ġfrom Ġthe Ġclass Ċ Ġ* Ġ- ĠBy Ġdefault , Ġall Ġclasses Ġin ĠKotlin Ġare Ġ' final ' Ċ Ġ* Ġ- ĠYou Ġalso Ġneed Ġto Ġbe Ġexplicit Ġabout Ġmethods Ġyou Ġwant Ġto Ġmake Ġover rid able , Ġalso Ġmarked Ġwith Ġ' open ' Ċ Ġ* Ġ*/ Ċ Ċ /* Ġ- ĠIf Ġthe Ġderived Ġclass Ġhas Ġno Ġprimary Ġconstructor , Ġthen Ġ Ġeach Ġsecondary Ġconstructor Ġhas Ġto Ġinitialize Ġthe Ġbase Ġtype Ċ Ġ* Ġusing Ġthe Ġ' super ' Ġkeyword , Ġor Ġto Ġdelegate Ġto Ġanother Ġconstructor Ġwhich Ġdoes Ġthat Ċ Ġ* Ġ- ĠNote Ġthat Ġin Ġthis Ġcase , Ġdifferent Ġsecondary Ġconstructors Ġcan Ġcall Ġdifferent Ġconstructors Ġof Ġthe Ġbase Ġtype Ċ Ġ* Ġe . g . Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġclass ĠMy View : ĠView Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġconstructor ( ctx : ĠContext ): Ġsuper ( ctx ) Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġconstructor ( ctx : ĠContext , Ġattrs : ĠAttributes ): Ġsuper ( ctx , Ġattrs ) Ċ Ġ* ĠĠĠĠĠ Ġ} Ċ * Ġ*/ Ċ Ċ /* ĠOver riding ĠMethods Ċ Ġ* Ġ- ĠKotlin Ġrequires Ġexplicit l Ġmod ifies Ġfor Ġover rid able Ġmembers Ġ( open ) Ġand Ġfor Ġoverrides Ċ Ġ* Ċ Ġ* ĠOver riding Ġproperties Ċ Ġ* Ġ- ĠWorks Ġlike Ġoverriding Ġmethods Ċ Ġ* Ġ*/ Ċ open Ġclass ĠShape { ĊĠĠĠ Ġopen Ġfun Ġdraw (){ Ġ/* ... */ Ġ} ĊĠĠĠ Ġfun Ġfill (){ Ġ/* ... */ Ġ} ĊĠĠĠ Ġ// Ġover rid able Ġproperty ĊĠĠĠ Ġopen Ġval Ġvertex Count : ĠInt Ġ= Ġ 0 Ċ } Ċ Ċ class ĠCircle () Ġ: ĠShape () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ Ġ/* ... */ Ġ} Ċ } Ċ Ċ class ĠRectangle Ġ: ĠShape () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġvertex Count Ġ= Ġ 4 Ċ } Ċ Ċ /* Ġ- ĠNote : Ġyou Ġcan Ġoverride Ġa Ġ' val ' Ġwith Ġa Ġ' var ' Ġproperty Ġbut Ġnot Ġvice Ġvers a Ċ Ġ* Ġ- ĠThis Ġis Ġallowed Ġbecause Ġa Ġ' val ' Ġproperty Ġdecl ares Ġa Ġ' get ' Ġmethod Ġand Ġoverriding Ġit Ġas Ġa Ġ' var ' Ġaddition ally Ċ Ġ* Ġdeclare Ġa Ġ' set ' Ġmethod Ġin Ġthe Ġderived Ġclass . Ċ Ġ* Ġ- ĠNote : Ġyou Ġcan Ġuse Ġthe Ġ' override ' Ġkeyword Ġas Ġpart Ġof Ġthe Ġproperty Ġdeclaration Ġin Ġa Ġprimary Ġconstructor Ċ Ġ* ĠĠ Ġe . g Ċ Ġ* ĠĠĠĠĠ ĠInterface ĠShape Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġval Ġvertex Count : ĠInt Ċ Ġ* ĠĠĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġclass ĠRectangle ( override Ġval Ġvertex Count : ĠInt Ġ= Ġ 4 ) Ġ: ĠShape Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġclass ĠPolygon : ĠShape Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġoverride Ġvar Ġvertex Count : ĠInt Ġ= Ġ 0 Ċ Ġ* ĠĠĠĠĠ Ġ} Ċ Ġ* Ġ*/ Ċ Ċ /* ĠDerived ĠClass Ġinitialization Ġorder Ċ Ġ* Ġ- ĠDuring Ġthe Ġconstruction Ġof Ġa Ġnew Ġinstance Ġof Ġa Ġderived Ġclass , Ġthe Ġbase Ġclass Ġinitialization Ġis Ġdone Ġas Ġthe Ġfirst Ċ Ġ* Ġstep Ġ( pre ce ded Ġonly Ġby Ġevaluation Ġof Ġthe Ġarguments Ġfor Ġthe Ġbase Ġclass Ġconstructor ) Ġand Ġthus Ġhappens Ġbefore Ġthe Ċ Ġ* Ġinitialization Ġlogic Ġof Ġthe Ġderived Ġclass Ġis Ġrun Ċ Ġ* Ġ*/ Ċ Ċ open Ġclass ĠBetter Base ( val Ġname : ĠString ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Initializing ĠBase ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġval Ġsize : ĠInt Ġ= Ġname . length . also Ġ{ Ġprintln (" Initializing Ġsize Ġin ĠBase : Ġ$ it ") Ġ} Ċ } Ċ Ċ class ĠBetter Derived ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġval ĠlastName : ĠString Ċ ) Ġ: ĠBetter Base ( name . capitalize (). also Ġ{ Ġprintln (" Argument Ġfor ĠBase : Ġ$ it ") Ġ}) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Initializing ĠDerived ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt Ġ= Ġ( super . size Ġ+ ĠlastName . length ). also Ġ{ Ġprintln (" Initializing Ġsize Ġin ĠDerived : Ġ$ it ")} Ċ } Ċ Ċ open Ġclass ĠBetter Rectangle { ĊĠĠĠ Ġopen Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Drawing Ġa ĠRectangle ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠborderColor : ĠString Ġget Ġ() Ġ= Ġ" black " ĊĠĠĠ Ġ} Ċ /* ĠCalling Ġthe Ġsuperclass Ġimplementation Ċ Ġ* Ġ- Inside Ġan Ġinner Ġclass , Ġaccessing Ġthe Ġsuperclass Ġof Ġthe Ġouter Ġclass Ġis Ġdone Ġwith Ġthe Ġsuper Ġkeyword Ċ Ġ* Ġqualified Ġwith Ġthe Ġouter Ġclass Ġname : Ġsuper @ OuterClass Ċ Ġ* Ġ*/ Ċ class ĠF illed Rectangle Ġ: ĠBetter Rectangle Ġ() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . draw () ĊĠĠĠĠĠĠĠ Ġprintln (" Fill ing Ġthe Ġrectangle ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfill Color : ĠString Ġget () Ġ= Ġsuper . border Color Ċ } Ċ Ċ class ĠAnother Filled Rectangle Ġ: ĠBetter Rectangle () Ġ{ ĊĠĠĠ Ġinner Ġclass ĠFill er Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfill () Ġ{ Ġ/* ... */ Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġdraw And Fill () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper @ Another Filled Rectangle . draw () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Draw n Ġa Ġfilled Ġrectangle Ġwith Ġcolor Ġ${ super @ Another Filled Rectangle . border Color }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /* ĠOver riding ĠRules Ċ Ġ* Ġ- Ġif Ġa Ġclass Ġinherits Ġmany Ġimplementations Ġof Ġthe Ġsame Ġmember Ġfrom Ġits Ġimmediate Ġsuper classes , Ġit Ġmust Ġoverride Ġthis Ċ Ġ* Ġmember Ġand Ġprovide e Ġits Ġown Ġimplementation Ġ( per haps , Ġusing Ġone Ġof Ġthe Ġinherited Ġones ). ĠTo Ġden ote Ġthe Ġsup ertype Ġfrom Ċ Ġ* Ġwhich Ġthe Ġinherited Ġimplementation Ġis Ġtaken , Ġwe Ġuse Ġ' super ' Ġqualified Ġby Ġthe Ġsup ertype Ġname Ġin Ġangle Ġbrackets , Ċ Ġ* Ġe . g . Ġsuper < Base > Ċ Ġ*/ Ċ Ċ open Ġclass ĠSecond Last Rectangle { ĊĠĠĠ Ġopen Ġfun Ġdraw () Ġ{ Ġprintln (" Drawing Ġfrom ĠLast Rectangle ") Ġ} Ċ } Ċ Ċ interface ĠPolygon Ġ{ ĊĠĠĠ Ġfun Ġdraw () Ġ{ Ġprintln (" Drawing Ġfrom ĠPolygon ") Ġ} Ġ// Ġinterface Ġmembers Ġare Ġopen Ġby Ġdefault Ċ } Ċ Ċ class ĠSquare () Ġ: ĠSecond Last Rectangle (), ĠPolygon Ġ{ ĊĠĠĠ Ġ// Ġto Ġavoid Ġamb iguity , Ġthe Ġcompiler Ġrequires Ġthat Ġyou Ġoverride Ġdraw () Ġand Ġprovide Ġits Ġimplementation . ĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper < Second Last Rectangle >. draw () ĊĠĠĠĠĠĠĠ Ġsuper < Polygon >. draw () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /* ĠAbstract Ġclasses Ċ Ġ* Ġ- Ġa Ġclass Ġand Ġsome Ġof Ġits Ġmembers Ġmay Ġbe Ġdeclared Ġ' abstract ' Ċ Ġ* Ġ- ĠAn Ġabstract Ġmember Ġdoes Ġnot Ġhave Ġan Ġimplementation Ġin Ġits Ġclass . Ċ Ġ* Ġ- ĠNote Ġthat Ġwe Ġdo Ġnot Ġneed Ġto Ġannotate Ġan Ġabstract Ġclass Ġor Ġfunction Ġwith Ġ' open ' Ġ-- Ġit Ġgoes Ġwithout Ġsaying Ċ Ġ* Ġ- ĠWe Ġcan Ġoverride Ġa Ġnon - abstract Ġopen Ġmember Ġwith Ġan Ġabstract Ġone . Ċ Ġ* Ġ*/ Ċ Ċ open Ġclass ĠLast Polygon Ġ{ ĊĠĠĠ Ġopen Ġfun Ġdraw () Ġ{} Ċ } Ċ Ċ abstract Ġclass ĠLast Rectangle Ġ: ĠLast Polygon () Ġ{ ĊĠĠĠ Ġoverride Ġabstract Ġfun Ġdraw () Ċ } Ċ Ċ /* ĠComp anion Ġobjects Ċ Ġ* Ġ- ĠIf Ġyou Ġneed Ġto Ġwrite Ġa Ġfunction Ġthat Ġcan Ġbe Ġcalled Ġwithout Ġhaving Ġa Ġclass Ġinstance Ġbut Ġneeds Ġaccess Ġto Ġthe Ċ Ġ* Ġinternals Ġof Ġa Ġclass Ġ( e . g . Ġa Ġfactory Ġmethod ), Ġyou Ġcan Ġwrite Ġit Ġas Ġa Ġmember Ġof Ġan Ġobject Ġdeclaration Ġinside Ġthat Ċ Ġ* Ġclass . Ċ Ġ* Ġ- ĠYou Ġcould Ġalso Ġdeclare Ġa Ġ' comp anion Ġobject ' Ġinside Ġyour Ġclass , Ġyou Ġwill Ġbe Ġable Ġto Ġcall Ġits Ġmembers Ġusing Ġonly Ġthe Ċ Ġ* Ġ Ġclass Ġname Ġas Ġa Ġqualifier Ġ*/ Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ ĠInit O der Demo (" Nick son ") ĊĠĠĠ Ġ/* ĊĠĠĠ ĠFirst Ġproperty : ĠNick son ĊĠĠĠ ĠFirst ĠInitial izer Ġblock Ġthat Ġprints ĠNick son ĊĠĠĠ ĠSecond Ġproperty Ġ 7 ĊĠĠĠ ĠSecond Ġinitializer Ġblock Ġthat Ġprints Ġ 7 ĊĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmy Student Ġ= ĠStudent (" Nick ", Ġ" Son ", Ġ 9 9 ) ĊĠĠĠ Ġprintln (" Student Ġname Ġis Ġ${ my Student . firstName } Ġ${ my Student . lastName }") ĊĊĠĠĠ Ġ/* ĠTo Ġcreate Ġan Ġinstance Ġof Ġa Ġclass , Ġyou Ġcall Ġthe Ġconstructor Ġas Ġif Ġit Ġwere Ġa Ġnormal Ġfunction Ġ*/ ĊĠĠĠ ĠCustomer (" Nick son ") ĊĊĠĠĠ Ġprintln (" Construct ing ĠBetter Derived (\" hello \", Ġ\" world \") ") ĊĠĠĠ ĠBetter Derived (" hello ", Ġ" world ") ĊĊĠĠĠ Ġprintln ("\ n Example Ġof ĠCalling ĠSuper Class Ġimplementation ") ĊĠĠĠ Ġprintln (" -------------------------------- -------------- ") ĊĠĠĠ ĠF illed Rectangle (). draw () ĊĠĠĠ Ġprintln ("\ n Calling ĠSuper Class Ġfrom Ġinner Ġclass ") ĊĠĠĠ Ġprintln (" -------------------------------- -------------- ") ĊĠĠĠ ĠAnother Filled Rectangle (). Fill er (). draw And Fill () ĊĠĠĠ Ġprintln ("\ n Over riding ĠRules ") ĊĠĠĠ Ġprintln (" -------------------------------- -------------- ") ĊĠĠĠ ĠSquare (). draw () Ċ Ċ }