package Ġcom . b projects . courses . kotlin . block 1 Ċ Ċ /** Ċ Ġ* Ġ@ author Ġe bas ane z Ċ Ġ* Ġ@ since Ġ 2 0 2 2 - 0 3 - 0 9 Ċ Ġ*/ Ċ class ĠLess on 3 Interfaces Ġ{ ĊĊĠĠĠ Ġ// ĠInterfaces Ġare Ġdeclared Ġin Ġa Ġsimilar Ġway Ġto ĠJava : ĊĠĠĠ Ġinterface ĠMy Interface Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠInterfaces Ġcan Ġhave Ġproperties Ġ( mutable Ġor Ġfinal ) ĊĠĠĠĠĠĠĠ Ġval Ġmy Abstract Field : ĠString ĊĊĠĠĠĠĠĠĠ Ġ// ĠInterface Ġproperties Ġcan Ġbe Ġinitialized Ġby Ġdefining Ġan Ġaccessor Ġmethod ĊĠĠĠĠĠĠĠ Ġval Ġmy Concrete Field : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġcan Ġbe Ġreplaced Ġby Ġinline Ġformula : Ġget () Ġ= Ġ" my StringValue " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ return Ġ" my StringValue "} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmy Abstract Method () ĊĊĠĠĠĠĠĠĠ Ġ// ĠDefault Ġmethods Ġcan Ġbe Ġdeclared Ġby Ġjust Ġadding Ġa Ġbody Ġto Ġthe Ġmethod Ġdeclaration ĊĠĠĠĠĠĠĠ Ġfun Ġmy Concrete Method () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" This Ġis Ġa Ġmethod Ġimplemented Ġin Ġthe Ġinterface ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠDefault Ġmethods Ġcan Ġbe Ġpublic Ġor Ġprivate ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmy Private Concrete Method () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" This Ġis Ġa Ġprivate Ġmethod Ġimplemented Ġin Ġthe Ġinterface ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠInterfaces Ġimplementation Ġsyntax Ġis Ġsimilar Ġto Ġclass Ġextension ĊĠĠĠ Ġclass ĠMy Class : ĠMy Interface Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠTo Ġimplement Ġinterface Ġproperties Ġand Ġmethods , Ġoverride Ġkeyword Ġmust Ġbe Ġadded ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmy Abstract Field Ġ= Ġ" field Value " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmy Abstract Method () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ... */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Concrete Method () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAn Ġinterface Ġcan Ġbe Ġextended Ġby Ġanother Ġinterface , Ġthat Ġcan Ġimplement Ġany Ġof Ġits Ġproperties Ġor Ġmethods , Ġan Ġadd Ġnew Ġones ĊĠĠĠ Ġinterface ĠMy Child Interface : ĠMy Interface Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmy Abstract Field : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" my Value Defined By Child Interface " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmy Abstract Method () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" This Ġmethod Ġimplements Ġparent Ġinterface Ġabstract Ġmethod ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġanother Abstract Method () ĊĊĠĠĠĠĠĠĠ Ġ/* ... */ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTo Ġsolve Ġconflict Ġdue Ġto Ġmultiple Ġinterfaces Ġinheritance Ġwith Ġdefault Ġmethods , Ġinterface Ġto Ġbe Ġused Ġmust Ġbe Ġexplicitly Ġnamed : ĊĠĠĠ Ġinterface ĠA Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfoo () Ġ{ Ġprint (" A ") Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġbar () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠB Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfoo () Ġ{ Ġprint (" B ") Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġbar () Ġ{ Ġprint (" bar ") Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġclass ĠC Ġ: ĠA , ĠB Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġimplementation Ġinvokes Ġboth Ġinterfaces Ġdefault Ġimplementations Ġ( but Ġis Ġnot Ġmandatory ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfoo () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper < A >. foo () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper < B >. foo () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ... */ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġmethod Ġdeclaration Ġis Ġnecessary Ġto Ġimplement Ġinterface ĠA , Ġbut Ġnot ĠB ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbar () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġthis Ġmethod Ġimplementation , Ġwe Ġdo Ġnot Ġinvoke Ġinterface ĠB Ġdefault Ġmethod , Ġso Ġit Ġwill Ġnot Ġbe Ġused Ġin Ġthis Ġclass Ġat Ġall Ġ( but Ġcan Ġbe Ġinvoked Ġin Ġany Ġother Ġpoint Ġof Ġthis Ġclass Ġby Ġexplicitly Ġinvoking Ġit : Ġsuper < b >. bar ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ... */ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }