package Ġcom . easy . kotlin Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġj ack Ġon Ġ 2 0 1 7 / 7 / 4 . Ċ Ġ*/ Ċ Ċ class ĠA ook ( name : ĠString ) Ċ Ċ class ĠCook ( name : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġname Ġ= Ġname Ċ } Ċ Ċ class ĠD ook ( val Ġname : ĠString ) Ċ class ĠE ook ( var Ġname : ĠString ) Ċ Ċ data Ġclass ĠBook ( val Ġname : ĠString ) Ċ data Ġclass ĠF ook ( var Ġname : ĠString ) Ċ Ċ // data Ġclass ĠG ook Ġ// Ġerror , Ġdata Ġclass Ġmust Ġhave Ġat Ġleast Ġone Ġprimary Ġconstructor Ġparameter Ċ // data Ġclass ĠHook ( name : ĠString )// Ġerror , Ġdata Ġclass Ġmust Ġhave Ġonly Ġvar / val Ġproperty Ċ // abstract Ġdata Ġclass ĠI ook ( val Ġname : ĠString ) Ġ// Ġmodifier Ġabstract Ġis Ġincompatible Ġwith Ġdata Ċ // open Ġdata Ġclass ĠJ ook ( val Ġname : ĠString ) Ġ// Ġmodifier Ġabstract Ġis Ġincompatible Ġwith Ġdata Ċ // sealed Ġdata Ġclass ĠK ook ( val Ġname : ĠString )// Ġmodifier Ġsealed Ġis Ġincompatible Ġwith Ġdata Ċ // inner Ġdata Ġclass ĠLook ( val Ġname : ĠString )// Ġmodifier Ġinner Ġis Ġincompatible Ġwith Ġdata ĊĊ Ċ final Ġdata Ġclass ĠM ook ( val Ġname : ĠString ) Ġ// Ġmodifier Ġabstract Ġis Ġincompatible Ġwith Ġdata Ċ Ċ data Ġclass ĠUser ( ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġgender : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġage : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġvalidate (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠP Ġ{ ĊĠĠĠ Ġinner Ġclass ĠIN Base Ċ } Ċ Ċ sealed Ġclass ĠS Base Ċ Ċ open Ġclass ĠD Base Ċ interface ĠI Base A Ċ interface ĠI Base B Ċ Ċ data Ġclass ĠLogin User ( val Ġname : ĠString Ġ= Ġ"", Ġval Ġpassword : ĠString Ġ= Ġ"") Ġ: ĠD Base (), ĠI Base A , ĠI Base B Ġ{ ĊĊĠĠĠ Ġvar ĠisActive Ġ= Ġtrue ĊĊĠĠĠ Ġconstructor ( name : ĠString , Ġpassword : ĠString , ĠisActive : ĠBoolean ) Ġ: Ġthis ( name , Ġpassword ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . isActive Ġ= ĠisActive ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . equals ( other ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . hashCode () ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġsuper . toString () Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalidate (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġa ook Ġ= ĠA ook (" A ook ") ĊĊĠĠĠ Ġval Ġcook Ġ= ĠCook (" Cook ") ĊĠĠĠ Ġcook . name ĊĊĊĠĠĠ Ġval Ġd ook Ġ= ĠD ook (" D ook ") ĊĠĠĠ Ġd ook . name ĊĠĠĠ Ġval Ġe ook Ġ= ĠE ook (" E ook ") ĊĠĠĠ Ġe ook . name ĊĊĠĠĠ Ġval Ġbook Ġ= ĠBook (" Book ") ĊĠĠĠ Ġbook . name ĊĠĠĠ Ġbook . copy (" Book 2 ") ĊĊĠĠĠ Ġval Ġj ack Ġ= ĠUser (" Jack ", Ġ" Male ", Ġ 1 ) ĊĠĠĠ Ġj ack . name ĊĠĠĠ Ġj ack . gender ĊĠĠĠ Ġj ack . age ĊĠĠĠ Ġj ack . toString () ĊĠĠĠ Ġj ack . validate () ĊĊĊĠĠĠ Ġval Ġolder Jack Ġ= Ġj ack . copy ( age Ġ= Ġ 2 ) ĊĠĠĠ Ġval Ġanother Jack Ġ= Ġj ack . copy ( name Ġ= Ġ" Jack y ", Ġage Ġ= Ġ 1 0 ) ĊĊĠĠĠ Ġval Ġro se Ġ= ĠUser (" R ose ", Ġ" Female ", Ġ 2 ) ĊĠĠĠ Ġro se . name ĊĠĠĠ Ġro se . gender ĊĠĠĠ Ġro se . age ĊĠĠĠ Ġro se . toString () ĊĊĠĠĠ Ġval Ġhe len Ġ= ĠUser (" Hel en ", Ġ" Female ", Ġ 1 5 ) ĊĠĠĠ Ġval Ġ( name , Ġgender , Ġage ) Ġ= Ġhe len ĊĠĠĠ Ġprintln ("$ name , Ġ$ gender , Ġ$ age Ġyears Ġof Ġage ") ĊĊĠĠĠ Ġval Ġlogin User 1 Ġ= ĠLogin User (" Admin ", Ġ" admin ") ĊĠĠĠ Ġprintln ( login User 1 . component 1 ()) ĊĠĠĠ Ġprintln ( login User 1 . component 2 ()) ĊĠĠĠ Ġprintln ( login User 1 . name ) ĊĠĠĠ Ġprintln ( login User 1 . password ) ĊĠĠĠ Ġprintln ( login User 1 . toString ()) ĊĊĠĠĠ Ġval Ġlogin User 2 Ġ= ĠLogin User ( password Ġ= Ġ" root ", Ġname Ġ= Ġ" root ") ĊĊĠĠĠ Ġval Ġlogin User 3 Ġ= ĠLogin User () ĊĠĠĠ Ġlogin User 3 . name ĊĠĠĠ Ġlogin User 3 . password Ċ Ċ } Ċ