Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġdar iel Ġ= ĠStudent (" Dar iel ", Ġ" C ru z ", Ġ 2 ) ĊĠĠĠ Ġprint ( dar iel . Id ) ĊĊĠĠĠ ĠStudent . create Post grad uate (" J uan ") ĊĠĠĠ ĠStudent . create Under grad (" Ped ro ") Ċ } Ċ Ċ class ĠProgram Ġ{ ĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġ// Make Ġthe ĠJ vm Ġsee Ġa Ġmethod Ġas Ġstatic ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdar iel Ġ= ĠStudent (" Dar iel ", Ġ" C ru z ", Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( dar iel . Id ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠPerson ( var ĠfirstName : ĠString , Ġvar ĠlastName : ĠString ){ ĠĠĠĠĊĠĠĠ Ġopen Ġfun ĠgetName () Ġ: ĠString Ġ= Ġ"$ firstName Ġ$ lastName " ĊĠĠĠ Ġabstract Ġfun Ġget Ad der ss (): String Ċ } Ċ Ċ // ĠClasses Ġand ĠMethods Ġare Ġfinal Ġby Ġdefault Ċ class ĠStudent ( var ĠfirstName : ĠString , Ġvar ĠlastName : ĠString , Ġ_ Id : ĠInt ) Ġ: ĠPerson ( firstName , ĠlastName ){ ĊĠĠĠ Ġval Ġid Ġ: ĠInt ĊĠĠĠ Ġvar Ġt utor Ġ: ĠString ĊĊĠĠĠ Ġ// ĠPrimary Ġconstructor ĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ_ Id ĊĠĠĠĠĠĠĠ Ġt utor Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSecondary Ġconstructor ĊĠĠĠ Ġconstructor ( var ĠfirstName : ĠString , Ġvar ĠlastName : ĠString , Ġ_ Id : ĠInt , Ġt utor : String ) Ġ: Ġthis ( firstName , ĠlastName , Ġ_ Id ){ ĊĠĠĠĠĠĠĠ Ġthis . t utor Ġ= Ġt utor ĊĠĠĠ Ġ} ĠĊĊĠĠĠ Ġfun Ġen role ( course Name Ġ: ĠString ){ ĊĠĠĠĠĠĠĠ Ġval Ġcourse Ġ= ĠCour ses . all Courses ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( it . Title Ġ== Ġcourse Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetName () Ġ: ĠString { ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Address (): String { ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Provide ĠFactory Ġfunctionality . ĠMethods Ġare Ġstatic ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠXml Serializer < Student > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Xml ( item : ĠStudent ){ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġfun Ġcreate Under grad ( name : ĠString ) Ġ: ĠUnder grad uate { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUnder grad uate ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Post grad uate ( name : ĠString ) Ġ: ĠPost grad uate { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPost grad uate ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠUnder grad uate ( firstName : ĠString ) Ġ: ĠStudent ( firstName , Ġ"", Ġ 1 ){ Ċ Ċ } Ċ Ċ class ĠPost grad uate ( firstName : ĠString ) Ġ: ĠStudent ( firstName , Ġ"", Ġ 1 ){ ĊĠĠĠĠ Ċ } Ċ Ċ interface ĠXml Serializer < T >{ ĊĠĠĠ Ġfun Ġto Xml ( item : ĠT ) Ċ }