14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

насл<strong>е</strong>довани<strong>е</strong><br />

Вм<strong>е</strong>сто базового класса мо)кно в зя ть один из производных<br />

Насл<strong>е</strong>довани<strong>е</strong> позволя<strong>е</strong>т использовать производный класс вм<strong>е</strong>сто базового.<br />

К прим<strong>е</strong>ру, <strong>е</strong>сли м<strong>е</strong>тод R e c i p e ( ) б<strong>е</strong>р<strong>е</strong>т объ<strong>е</strong>кт C h e e s e , в то вр<strong>е</strong>мя как класс<br />

A g e d V e r m o n tC h e d d a r насл<strong>е</strong>ду<strong>е</strong>т от класса C h e e s e , м<strong>е</strong>тоду R e c i p e () можно<br />

п<strong>е</strong>р<strong>е</strong>дать экз<strong>е</strong>мпляр A g e d V e r m o n tC h e d d a r . В р<strong>е</strong>зультат<strong>е</strong> м<strong>е</strong>тод R e c i p e () буд<strong>е</strong>т<br />

им<strong>е</strong>ть доступ только к полям, м<strong>е</strong>тодам и свойствам класса C h e e s e , но н<strong>е</strong> «увидит»<br />

эл<strong>е</strong>м<strong>е</strong>нты класса A g e d V e r m o n tC h e d d a r .<br />

Допустим, у нас им<strong>е</strong><strong>е</strong>тся м<strong>е</strong>тод, анализирующий объ<strong>е</strong>кты S a n d w ic h :<br />

p u b l i c v o id S a n d w ic h A n a ly ze r(S a n d w ich sp ecim en ) {<br />

)<br />

i n t c a l o r i e s = s p e c im e n .C o u n t C a lo r ie s 0 ;<br />

U p d a t e D i e t P l a n ( c a l o r i e s ) ;<br />

P e r fo r m B r e a d C a lc u la tio n s(sp e c im e n .S lic e sO fB r e a d , s p e c im e n .T o a s te d ) ;<br />

Sandwich<br />

Toasted<br />

SlicesOfBread<br />

CountCaloriesO<br />

BLT<br />

SlicesOfBacon<br />

AmountOfLettuce<br />

AddSideOfFriesO<br />

© М<strong>е</strong>тоду можно п<strong>е</strong>р<strong>е</strong>дать объ<strong>е</strong>кт сэндвич, а можно с б<strong>е</strong>коном, салатом и помидорами<br />

BLT (сэндвич). Свойства этого сп<strong>е</strong>циального мы насл<strong>е</strong>ду<strong>е</strong>м от класса<br />

S a n d w ic h :<br />

p u b l i c b u t t o n l _ C l i c k ( o b j e c t s e n d e r , E v en tA rg s e) {<br />

}<br />

BLT myBLT = new BLT() ;<br />

S a n d w ich A n alyzer(m yB L T );<br />

Подробно oS э т о м<br />

Mt>i поговорим<br />

6 сл<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>но.<br />

p u b l i c b u t t o n 2 _ C l i c k ( o b j e c t se n d e r , E ven tA rgs e) {<br />

S an dw ich m ySandwich = new S a n d w ic h ( );<br />

BLT myBLT = new BLT();<br />

S an dw ich som eRandomSandwich = myBLT;<br />

Знач<strong>е</strong>ни<strong>е</strong> myBLT м о ж ­<br />

но присвоить люоои<br />

п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной класса<br />

Sandw chj т ак как<br />

0LT — э т о подвид<br />

сэндвича.<br />

}<br />

BLT anotherB L T = m ySandwich; / / < - - - ЭТО HE КСЙЯ1ИЛИРУЕТСЯ! ! !<br />

ка компилироват ься н<strong>е</strong>^дуд<strong>е</strong>т<br />

дальш<strong>е</strong> ► 255

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!