Attention! Your ePaper is waiting for publication!
By publishing your document, the content will be optimally indexed by Google via AI and sorted into the right category for over 500 million ePaper readers on YUMPU.
This will ensure high visibility and many readers!
инт<strong>е</strong>рф<strong>е</strong>йсы и абстрактны<strong>е</strong> классы<br />
инт<strong>е</strong>рф<strong>е</strong>йсы U насл<strong>е</strong>довани<strong>е</strong><br />
Когда один класс насл<strong>е</strong>ду<strong>е</strong>т от другого, он получа<strong>е</strong>т вс<strong>е</strong> <strong>е</strong>го м<strong>е</strong>тоды<br />
и свойства. Насл<strong>е</strong>довани<strong>е</strong> инт<strong>е</strong>рф <strong>е</strong>йсов происходит <strong>е</strong>щ<strong>е</strong><br />
прощ<strong>е</strong>. Так как в инт<strong>е</strong>рф<strong>е</strong>йсах отсутствуют т<strong>е</strong>ла м<strong>е</strong>тодов, вам<br />
уж<strong>е</strong> н<strong>е</strong> прид<strong>е</strong>тся заботиться о вызов<strong>е</strong> конструкторов и м<strong>е</strong>тодов<br />
базового класса. Насл<strong>е</strong>дующи<strong>е</strong> инт<strong>е</strong>рф<strong>е</strong>йсы просто накапливают<br />
в с<strong>е</strong>б<strong>е</strong> м<strong>е</strong>тоды и свойства своих родит<strong>е</strong>л<strong>е</strong>й.<br />
инт<strong>е</strong>рф<strong>е</strong>йсы и абстрактны<strong>е</strong> классы инт<strong>е</strong>рф<strong>е</strong>йсы U насл<strong>е</strong>довани<strong>е</strong> Когда один класс насл<strong>е</strong>ду<strong>е</strong>т от другого, он получа<strong>е</strong>т вс<strong>е</strong> <strong>е</strong>го м<strong>е</strong>тоды и свойства. Насл<strong>е</strong>довани<strong>е</strong> инт<strong>е</strong>рф <strong>е</strong>йсов происходит <strong>е</strong>щ<strong>е</strong> прощ<strong>е</strong>. Так как в инт<strong>е</strong>рф<strong>е</strong>йсах отсутствуют т<strong>е</strong>ла м<strong>е</strong>тодов, вам уж<strong>е</strong> н<strong>е</strong> прид<strong>е</strong>тся заботиться о вызов<strong>е</strong> конструкторов и м<strong>е</strong>тодов базового класса. Насл<strong>е</strong>дующи<strong>е</strong> инт<strong>е</strong>рф<strong>е</strong>йсы просто накапливают в с<strong>е</strong>б<strong>е</strong> м<strong>е</strong>тоды и свойства своих родит<strong>е</strong>л<strong>е</strong>й. i n t e r f a c e IW o r k e r { s t r i n g J o b { g e t ; } i n t S h i f t s L e f t { g e t ; v o i d D o T h i s J o b ( s t r i n g } j o b , i n t s h i f t s ) Om созданного ^ НЛММ инт<strong>е</strong>рф<strong>е</strong>й ca M orker м о г у т насл<strong>е</strong>довать вс<strong>е</strong> остальны<strong>е</strong> инт<strong>е</strong>рф<strong>е</strong>йсы. Н а д и а г р а м м <strong>е</strong> к л а с с о в н а с л <strong>е</strong> д о в а н и <strong>е</strong> и н т <strong>е</strong> р ф <strong>е</strong> й с о в о б о з н а ч а <strong>е</strong> т с я п у н к т и р н о й л и н и <strong>е</strong> й . i (interface) IW orker Job ShiftsLeft DoThisJobO Worl
скр<strong>е</strong>стить бульдога с носорогом RoboBee 4 0 0 0 функциониру<strong>е</strong>т б<strong>е</strong>з м<strong>е</strong>да Создадим пч<strong>е</strong>лу новой формации, КоЬоВ<strong>е</strong><strong>е</strong> 4000, работающую на топлив<strong>е</strong>. «Привив» <strong>е</strong><strong>е</strong> инт<strong>е</strong>рф<strong>е</strong>йсу инт<strong>е</strong>рф<strong>е</strong>йс 11^огк<strong>е</strong>г, вы да<strong>е</strong>т<strong>е</strong> <strong>е</strong>й возможность д<strong>е</strong>лать вс<strong>е</strong> то, что д<strong>е</strong>ла<strong>е</strong>т обычная пч<strong>е</strong>ла. RoboBee ShiftsToWork ShiftsWorked ShiftsLeft Job DoThisJobO class Robot { public void ConsumeGasO } Г Г Г г Х Г к о М . Класс RoboBee насл<strong>е</strong>ди<strong>е</strong>т от /г’<strong>е</strong>йлизу<strong>е</strong>т ант<strong>е</strong>^ф <strong>е</strong>ас (Worker. В итог<strong>е</strong> м о ж <strong>е</strong> т выполнять ра6о~ - обычной пч<strong>е</strong>лы. ^ class RoboBee Robot, IWorker f r . { Класс RoboBee private int shiftsToWork; р<strong>е</strong>ализу<strong>е</strong>т private int shiftsWorked; вс<strong>е</strong> м<strong>е</strong>тоды инт<strong>е</strong>рф<strong>е</strong>йса public int ShiftsLeft iWorker- {get {return shiftsToWork - shiftsWorked;}} public string Job { get; private set; } public bool DoThisJob(string job, int shiftsToWork){...} public void WorkOneShiftO {...} } Остальны<strong>е</strong> классы наш<strong>е</strong>го прилож<strong>е</strong>ния н<strong>е</strong> «увидят» функциональной разницы м<strong>е</strong>жду пч<strong>е</strong>лой-роботом и обычной пч<strong>е</strong>лой. Оба эти класса р<strong>е</strong>ализуют инт<strong>е</strong>рф<strong>е</strong>йс ХКогк<strong>е</strong>г, с точки зр<strong>е</strong>ния программы д<strong>е</strong>йствуют, как рабочи<strong>е</strong> пч<strong>е</strong>лы. Отличить объ<strong>е</strong>кты друг от друга позволит оп<strong>е</strong>ратор if (workerBee is Robot) { } // мы узнали, что workerBee // это объ<strong>е</strong>кт Robot Оп<strong>е</strong>ратор 15 показы ва<strong>е</strong>т, какой класс или инт<strong>е</strong>рф<strong>е</strong>йс р<strong>е</strong>ализу<strong>е</strong>т ^огк<strong>е</strong>гВ<strong>е</strong><strong>е</strong> и каково <strong>е</strong>го полож<strong>е</strong>ни<strong>е</strong> в и<strong>е</strong>рархии насл<strong>е</strong>дования. Любой класс мож<strong>е</strong>т р<strong>е</strong>ализовывать ЛЮБОЙ инт<strong>е</strong>рф<strong>е</strong>йс, <strong>е</strong>сли он р<strong>е</strong>ализу<strong>е</strong>т вс<strong>е</strong> м<strong>е</strong>тоды и свойства этого инт<strong>е</strong>рф<strong>е</strong>йса. 296 глава 7