11. Klasy specjalne Włodzimierz Kasprzak

JiMP3

11. Klasy specjalne

1

Układ

11.1 Klasa abstrakcyjna

11.2 Interfejs

JiMP3

11. Klasy specjalne

2

11.1 Klasa abstrakcyjna

Pewne klasy pełnią jedynie rolę klas bazowych:

Nie ma potrzeby tworzenia obiektów takich klas

Są to klasy abstrakcyjne

N

Niie

e m

m a

a o

o b

biie

e k

k ttó

ó w

w

M

M u

u z

z y

y k

k S

S ttrru

u n

n o

o w

w y

y

k

klla

a s

s a

a b

b s

s ttrra

a k

k c

c y

yjjn

n y

y c

c h

h

{{ k

klla

a s

s a

a a

a b

b s

s ttrra

a k

k c

c y

yjjn

n a

a }}

M

M o

o Ŝ

Ŝ n

n a

a ttw

w o

o rrz

z y

y ć

ć o

o b

biie

e k

k tty

y

k

klla

a s

s k

k o

o n

n k

k rre

e ttn

n y

y c

c h

h

G

Giitta

a rrz

z y

y s

s tta

a

S

S k

k rrz

z y

y p

p e

e k

k

«

« k

k o

o n

n k

k rre

e ttn

n a

a »

»

«

« k

k o

o n

n k

k rre

e ttn

n a

a »

»

JiMP3

11. Klasy specjalne

3

Deklaracja klasy abstrakcyjnej

Do deklaracji klasy abstrakcyjnej słuŜy słowo kluczowe abstract.

a

a b

b s

s t

t r

r a

a c

c t

t

c

c l

l a

a s

s s

s

T

T o

o k

k e

e n

n

{

{

.

. .

. .

.

}

}

T

T o

o k

k e

e n

n

c

c l

l a

a s

s s

s

T

T e

e s

s t

t

{ abstrakcyjna }

{

{

{ abstrakcyjna

s

s t

t a

a t

t i

i c

c

v

v o

o i

i d

d

M

M a

a i

i n

n (

(

)

)

{

{

B

Błłłą

ą d

d –

– n

niiie

e m

m o

o Ŝ

Ŝ n

n a

a ttw

w o

o rrz

z y

y ć

ć o

o b

biiie

e k

k ttó

ó w

w

n

n e

e w

w

T

T o

o k

k e

e n

n (

(

)

) ;

;

k

kllla

a s

s y

y a

a b

b s

s ttrra

a k

k c

c y

yjjjn

n e

ejjj

}

}

}

}

JiMP3

11. Klasy specjalne

4

Deklaracja metody abstrakcyjnej

Deklaracja metody ze słowem kluczowym abstract : a

a b

b s

s t

t r

r a

a c

c t

t

c

c l

l a

a s

s s

s

T

T o

o k

k e

e n

n

{

{

p

p u

u b

b l

l i

i c

c

v

v i

i r

r t

t u

u a

a l

l

s

s t

t r

r i

i n

n g

g

N

N a

a m

m e

e (

(

)

)

{

{

.

. .

. .

.

}

}

p

p u

u b

b l

l i

i c

c

a

a b

b s

s t

t r

r a

a c

c t

t

i

i n

n t

t

L

L e

e n

n g

g t

t h

h (

(

)

) ;

;

}

}

c

c l

l a

a s

s s

s

C

C o

o m

m m

m e

e n

n t

t T

T o

o k

k e

e n

n :

:

T

T o

o k

k e

e n

n

{

{

p

p u

u b

b l

l i

i c

c

o

o v

v e

e r

r r

r i

i d

d e

e

s

s t

t r

r i

i n

n g

g

N

N a

a m

m e

e (

(

)

)

{

{

.

. .

. .

.

}

}

p

p u

u b

b l

l i

i c

c

o

o v

v e

e r

r r

r i

i d

d e

e

i

i n

n t

t

L

L e

e n

n g

g t

t h

h (

(

)

)

{

{

.

. .

. .

.

}

}

}

}

Metody abstrakcyjne mogą być deklarowane jedynie w klasach abstrakcyjnych.

Metody abstrakcyjne nie mogą być definiowane.

JiMP3

11. Klasy specjalne

5

Charakterystyka metod abstrakcyjnych

Metody abstrakcyjne są wirtualne.

MoŜna

nadpisywać

metody abstrakcyjne

metodami

definiowanymi w klasach pochodnych.

Metody abstrakcyjne mogą nadpisywać metody wirtualne, zadeklarowane w klasie bazowej.

Metody abstrakcyjne mogą nadpisywać metody nadpisujące metody wirtualne.

JiMP3

11. Klasy specjalne

6

11.2 Interfejsy

Interfejsy zawierają jedynie deklaracje operacji bez ich definicji.

Interfejsy mogą zawierać deklaracje własności i definicje stałych.

M

M u

u z

z y

y k

k

Z

Z a

a w

wiie

e rra

a d

d e

e k

klla

a rra

a c

cjje

e o

o p

p e

e rra

a c

cjjii..

«

« iin

n tte

e rrffe

ejjs

s »

»

N

Niie

e m

m o

o Ŝ

Ŝ n

n a

a ttw

w o

o rrz

z y

y ć

ć o

o b

biie

e k

k ttó

ó w

w iin

n tte

e rrffe

ejjs

s u

u ..

M

M o

o Ŝ

Ŝ e

e z

z a

a w

wiie

e rra

a c

c p

p e

e w

w n

n e

e d

d e

e ffiin

niic

cjje

e m

m e

e tto

o d

d ..

M

M u

u z

z y

y k

k S

S ttrru

u n

n o

o w

w y

y

N

Niie

e m

m o

o Ŝ

Ŝ n

n a

a ttw

w o

o rrz

z y

y ć

ć o

o b

biie

e k

k ttó

ó w

w

{{ a

a b

b s

s ttrra

a k

k c

c y

yjjn

n a

a }}

k

klla

a s

s y

y a

a b

b s

s ttrra

a k

k c

c y

yjjn

n e

ejj..

M

M u

u s

sii z

z a

a w

wiie

e rra

a ć

ć d

d e

e ffiin

niic

cjje

e w

w s

s z

z y

y s

s ttk

kiic

c h

h

S

S k

k rrz

z y

y p

p e

e k

k

d

d z

ziie

e d

d z

ziic

c z

z o

o n

n y

y c

c h

h o

o p

p e

e rra

a c

cjjii..

«

« k

k o

o n

n k

k rre

e ttn

n a

a »

»

M

M o

o Ŝ

Ŝ n

n a

a ttw

w o

o rrz

z y

y ć

ć o

o b

biie

e k

k tty

y k

klla

a s

s y

y k

k o

o n

n k

k rre

e ttn

n e

ejj..

JiMP3

11. Klasy specjalne

7

Deklaracja interfejsu

Do deklaracji słuŜy słowo kluczowe interface

Wszystkie składowe mają niejawnie dostęp publiczny N

N a

a z

z w

w ę

ę iiin

n tte

e rrffe

ejjjs

s u

u z

z a

a c

c z

z y

y n

n a

a m

m y

y

o

o d

d d

d u

u Ŝ

Ŝ e

ejjj llliiitte

e rry

y “

“ II”

” ((k

k o

o n

n w

w e

e n

n c

cjjja

a ))

i

i n

n t

t e

e r

r f

f a

a c

c e

e

I

I T

T o

o k

k e

e n

n

IToken

{

{

« interfejs »

i

i n

n t

t

L

L i

i n

n e

e N

N u

u m

m b

b e

e r

r (

(

)

) ;

;

LineNumber( )

s

s t

t r

r i

i n

n g

g

N

N a

a m

m e

e (

(

)

) ;

;

LineNumber(

Name( )

}

}

B

B rra

a k

k s

s p

p e

e c

c y

y ffiiik

k a

a c

cjjjiii

B

B rra

a k

k ttrre

e ś

ś c

ciii

t

t rry

y b

b u

u d

d o

o s

s ttę

ę p

p u

u

d

d e

e ffiiin

niiic

cjjjiii m

m e

e tto

o d

d

JiMP3

11. Klasy specjalne

8

Implementowanie wielu interfejsów

Klasa moŜe implementować zero lub więcej interfejsów i

i n

n t

t e

e r

r f

f a

a c

c e

e

I

I T

T o

o k

k e

e n

n

{

{

IToken

IVisitable

s

s t

t r

r i

i n

n g

g

N

N a

a m

m e

e (

(

)

) ;

;

« interfejs »

« interfejs »

}

}

i

i n

n t

t e

e r

r f

f a

a c

c e

e

I

I V

V i

i s

s i

i t

t a

a b

b l

l e

e

{

{

v

v o

o i

i d

d

A

A c

c c

c e

e p

p t

t (

( I

I V

V i

i s

s i

i t

t o

o r

r

v

v )

) ;

;

}

}

c

c l

l a

a s

s s

s

T

T o

o k

k e

e n

n :

:

I

I T

T o

o k

k e

e n

n ,

,

I

I V

V i

i s

s i

i t

t a

a b

b l

l e

e

Token

{

{

.

. .

. .

.

« konkretna »

}

}

Interfejs moŜe dziedziczyć po innych interfejsach, w tym po wielu naraz.

Klasa moŜe mieć szerszy dostęp niŜ jej bazowe interfejsy.

Interfejs nie moŜe być szerzej dostępny niŜ jego bazowe interfejsy.

JiMP3

11. Klasy specjalne

9

Implementowanie metod interfejsu

Klasa musi implementować wszystkie metody interfejsu bazowego.

Implementująca metoda w klasie konkretnej musi mieć identyczną deklarację co implementowana metoda interfejsu.

Implementująca metoda moŜe być wirtualna lub nie.

c

c l

l a

a s

s s

s

T

T o

o k

k e

e n

n :

:

I

I T

T o

o k

k e

e n

n ,

,

I

I V

V i

i s

s i

i t

t a

a b

b l

l e

e

{

{

p

p u

u b

b l

l i

i c

c

v

v i

i r

r t

t u

u a

a l

l

s

s t

t r

r i

i n

n g

g

N

N a

a m

m e

e (

(

)

)

Ten sam typ wyniku

{

{

.

. .

. .

.

Ta sama nazwa

}

}

Te same parametry

p

p u

u b

b l

l i

i c

c

v

v o

o i

i d

d

A

A c

c c

c e

e p

p t

t (

( I

I V

V i

i s

s i

i t

t o

o r

r

v

v )

)

Te same parametr

{

{

.

. .

. .

.

}

}

}

}

JiMP3

11. Klasy specjalne

10

Implementacja jawna metody interfejsu

Korzystamy z nazwy kwalifikowanej dla metody interfejsu: c

c l

l a

a s

s s

s

T

T o

o k

k e

e n

n :

:

I

I T

T o

o k

k e

e n

n ,

,

I

I V

V i

i s

s i

i t

t a

a b

b l

l e

e

{

{

s

s t

t r

r i

i n

n g

g

I

I T

T o

o k

k e

e n

n .

. N

N a

a m

m e

e (

(

)

)

{

{

.

. .

. .

.

}

}

v

v o

o i

i d

d

I

I V

V i

i s

s i

i t

t a

a b

b l

l e

e .

. A

A c

c c

c e

e p

p t

t (

( I

I V

V i

i s

s i

i t

t o

o r

r

v

v )

)

{

{

.

. .

. .

.

}

}

}

}

Ograniczenia dla jawnej implementacji metod interfejsu:

Dostęp do metod moŜliwy jest jedynie poprzez interfejs

Te metody nie mogą być deklarowane jako wirtualne

Nie moŜna podać kwalifikatora dostępu.

JiMP3

11. Klasy specjalne

11

Test: wykryj błędy!

i

i n

n t

t e

e r

r f

f a

a c

c e

e

I

I T

T o

o k

k e

e n

n

{

{

s

s t

t r

r i

i n

n g

g

N

N a

a m

m e

e (

(

)

) ;

;

i

i n

n t

t

L

L i

i n

n e

e N

N u

u m

m b

b e

e r

r (

(

)

) {

{ r

r e

e t

t u

u r

r n

n

4

4 2

2 ;

; }

}// Błąd – definicja metody

s

s t

t r

r i

i n

n g

g

n

n a

a m

m e

e ;

;

// Błąd – pole nie moŜe tu wystąpić

}

}

c

c l

l a

a s

s s

s

T

T o

o k

k e

e n

n

: IToken // Błąd – brak implementacji interfejsu

{

{

// Błąd – brak implementacji LineNumber() s

s t

t r

r i

i n

n g

g

I

I T

T o

o k

k e

e n

n .

. N

N a

a m

m e

e (

(

)

)

{

{ .

. .

. .

. }

}

s

s t

t a

a t

t i

i c

c

v

v o

o i

i d

d

M

M a

a i

i n

n (

(

)

)

{

{

I

I T

T o

o k

k e

e n

n

t

t

=

=

n

n e

e w

w

I

I T

T o

o k

k e

e n

n (

(

)

) ;

;

}

}

// Błąd – nie ma obiektu interfejsu

}

}

JiMP3

11. Klasy specjalne

12

Rola klasy abstrakcyjnej i interfejsu w hierarchii klas

Przykład 1

i

i n

n t

t e

e r

r f

f a

a c

c e

e

I

I T

T o

o k

k e

e n

n

I

I T

T o

o k

k e

e n

n

{

{

« interfejs »

s

s t

t r

r i

i n

n g

g

N

N a

a m

m e

e (

(

)

) ;

;

« interfejs

}

}

a

a b

b s

s t

t r

r a

a c

c t

t

c

c l

l a

a s

s s

s

T

T o

o k

k e

e n

n :

:

I

I T

T o

o k

k e

e n

n

{

{

T

T o

o k

k e

e n

n

s

s t

t r

r i

i n

n g

g

I

I T

T o

o k

k e

e n

n .

. N

N a

a m

m e

e (

(

)

)

{

{

.

. .

. .

.

{ abstrakcyjna }

}

}

.

. .

. .

.

}

}

c

c l

l a

a s

s s

s

C

C o

o m

m m

m e

e n

n t

t T

T o

o k

k e

e n

n :

:

T

T o

o k

k e

e n

n

Comment

Keyword

{

{

.

. .

. .

.

Token

Token

}

}

« konkretna »

« konkretna »

c

c l

l a

a s

s s

s

K

K e

e y

y w

w o

o r

r d

d T

T o

o k

k e

e n

n :

:

T

T o

o k

k e

e n

n

{

{

.

. .

. .

.

}

}

JiMP3

11. Klasy specjalne

13

Rola klas abstrakcyjnych (2)

Przykład 2

i

i n

n t

t e

e r

r f

f a

a c

c e

e

I

I T

T o

o k

k e

e n

n

I

I T

T o

o k

k e

e n

n

{

{

« interfejs »

s

s t

t r

r i

i n

n g

g

N

N a

a m

m e

e (

(

)

) ;

;

}

}

a

a b

b s

s t

t r

r a

a c

c t

t

c

c l

l a

a s

s s

s

T

T o

o k

k e

e n

n

{

{

T

T o

o k

k e

e n

n

p

p u

u b

b l

l i

i c

c

v

v i

i r

r t

t u

u a

a l

l

s

s t

t r

r i

i n

n g

g

N

N a

a m

m e

e (

(

)

)

{ abstrakcyjna }

{

{

.

. .

. .

.

{ abstrakcyjna

}

}

.

. .

. .

.

}

}

Comment

Keyword

c

c l

l a

a s

s s

s

C

C o

o m

m m

m e

e n

n t

t T

T o

o k

k e

e n

n :

:

T

T o

o k

k e

e n

n ,

,

I

I T

T o

o k

k e

e n

n

Comment

Keywor

{

{

.

. .

. .

.

Token

Token

}

}

« konkretna »

« konkretna »

c

c l

l a

a s

s s

s

K

K e

e y

y w

w o

o r

r d

d T

T o

o k

k e

e n

n :

:

T

T o

o k

k e

e n

n ,

,

I

I T

T o

o k

k e

e n

n

{

{

.

. .

. .

.

}

}

JiMP3

11. Klasy specjalne

14

Porównanie: klasy abstrakcyjne a interfejsy

Podobieństwa

Nie mogą być tworzone obiekty tych klas

Nie mogą być „plombowane”

RóŜnice

Interfejs nie moŜe zawierać Ŝadnej definicji metody

Interfejs nie moŜe zawierać deklaracji nie-publicznych składowych

Interfejs

nie moŜe dziedziczyć klas, poza innymi interfejsami.

JiMP3

11. Klasy specjalne

15

Test: wykryj błędy!

c

c l

l a

a s

s s

s

F

F i

i r

r s

s t

t

// Metoda abstrakcyjna tylko w klasie abstrakcyjnej

{

{

1

ł

p

p u

u b

b l

l i

i c

c

a

a b

b s

s t

t r

r a

a c

c t

t

v

v o

o i

i d

d

M

M e

e t

t o

o d

d a

a (

(

)

) ;

;

B ąd

}

}

a

a b

b s

s t

t r

r a

a c

c t

t

c

c l

l a

a s

s s

s

S

S e

e c

c o

o n

n d

d

{

{

Błąd

p

p u

u b

b l

l i

i c

c

a

a b

b s

s t

t r

r a

a c

c t

t

v

v o

o i

i d

d

M

M e

e t

t o

o d

d a

a (

(

)

)

{

{

}

}

2

}

}

// Metoda abstrakcyjna nie moŜe być definiowana i

i n

n t

t e

e r

r f

f a

a c

c e

e

I

I T

T h

h i

i r

r d

d

{

{

v

v o

o i

i d

d

M

M e

e t

t o

o d

d a

a (

(

)

) ;

;

Błąd

}

}

3

ą

a

a b

b s

s t

t r

r a

a c

c t

t

c

c l

l a

a s

s s

s

T

T h

h i

i r

r d

d :

:

I

I T

T h

h i

i r

r d

d

{

{

// Brak implementacji Metoda() lub jej deklaracji jako abstrakcyjnej

}

}

JiMP3

11. Klasy specjalne

16