clase interene

Upload: aurika-manolaki

Post on 28-Feb-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Clase Interene

    1/7

    Interfee JAVA

    Interfeele JAVA reprezint o colecie de metode abstracte i de constante. Utilizareaunei interfee este justificat n cazurile n care se dorete ca o clas s poat ficonvertit n mai multe tipuri de baz ntre care nu exist o relaie de motenire.

    eoarece Java nu suport motenirea multipl! interfeele sunt o variant de rezolvarea acestor situaii.

    "a fel ca i o clas! o interfa nainte ca ea s poat fi utilizat! trebuie declarat. #ai n cazul claselor abstracte nu putem instania o interfa! dar putem declara ovariabil ca fiind de tipul interfeei.

    eclararea unei interfee Java

    $ prin cuv%ntul c&eie interface$ structura

    'modificator( interface identificator interfa 'extends lista)interfete(*lista)metode+lista)constante+

    ,

    -odificatorul unei interfee poate fi public sau abstract. Av%nd n vedere c ointerfa este abstract prin definiie! utilizarea modificatorului abstract esteredundant. ublic acelai neles ca i n declaraia clasei.

    Identificatorul /numele0 unei interfee respect aceleai re1uli ca i identificatorul uneiclase av%nd domeniul de vizibilitate pac2a1e$ul n care a fost declarat interfaa i

    pro1ramele n care a fost importat pac2a1e$ul respectiv.

    3 interfa spre deosebire de o clas poate moteni mai multe interfee. -otenirea seface prin extends urmat de lista numelor interfeelor motenite /lista)interfee0separate prin vir1ul. rin derivare! o interfa motenete de la interfaa de baz at%tmetodele! c%t i constantele acesteia.

    Ex. ublic interface Id4 extends Id5! Id6! Id7 *8

    ,

    9n corpul interfeei pot exista o list de declaraii metode i o list de declaraii deconstante. -etodele declarate ntr$o interfa sunt implicit abstracte. #onstanteledeclarate n interfa sunt atribute care sunt implicit static i final.

    "a compilarea unui fiier surs Java ce conine o interfa va rezulta un fiier cuextensia .class ataat respectivei interfee.

    Interfeele la fel ca i clasele abstracte nu pot fi instaniate. :le pot fi utilizate ndeclaraia unei clase! obli1%nd clasa respectiv s implementeze metodele declarate n

    interfa. 9n acest context! se spune c o clas implementeaz interfaa respectiv.Acest lucru se face folosind implements.

  • 7/25/2019 Clase Interene

    2/7

    3 clas poate implementa mai multe interfee. "a fel ca i n cazul derivrii dintr$oclas abstract! clasa este obli1at s implementeze fiecare metod din interfeele cele implementeaz. 9n caz contrar interfaa trebuie declarat abstract.ac o clas ;A< implementeaz o interfa ;=

    implicit. #a urmare el poate fi atribuit unui alt obiect de tip =. >umele unei interfeepoate fi utilizat la fel ca i numele unei clase! mai puin ns la instanierea prinoperatorul nero.

    Clase interioare (Inner classes)

    3 clas interioar este o clas definit n interiorul altei clase. Astfel! clasa interioarde acces direct la toi membrii clasei n care este definit i invers.

    3 clas interioar poate fi declarat oriunde n interiorul unei clase. 9n cazul n care edeclarat n afara oricrei metode! clasa interioar are acces la oricare membru alclasei exterioare! fie el i privat.9n cazul n care clasa interioar se declar n interiorul unei metode! are n plus accesla oricare variabil local a metodei.

    >u numai clasa interioar are acces la membrii privai ai clasei exterioare! ci i inversclasa exterioar are acces la membrii privai ai clasei interioare.

    "a compilarea unui pro1ram sursa ce conine declaraii de clase se vor obine pentrufiecare clas un fiier .class! iar pentru clasa interioar un fiier

    >ume clas ext ? Inner#lass.class

    nume clas interioar

    3 clas interioar poate avea modificatorii specifici claselor /abstract! final0 i o seriede modificatori specifici membrilor unei clase /public! protected! private! static0.Aceti modificatori atribuie clasei interioare aceleai proprieti ca n cazul oricruimembru al unei clase.

    3 clas interioar static nu poate accesa dec%t membrii statici ai clasei exterioare. Iar

    o metod static a clasei interioare definite n metoda respectiv.3 caracteristic a claselor interioare este c ele pot fi declarate fr nume /anonime0implement%nd o interfa sau o clas Java.

    Noiunea de interfa

    :ste posibil s declarm clase abstracte n care toate metodele sunt abstracte. Acestlucru este posibil i cu ajutorul interfeelor.

    Interfeele constituie /soluia0 mecanismul propus de Java pentru tratarea problemelorridicate de motenirea multipl.

  • 7/25/2019 Clase Interene

    3/7

    @

    =

    B

    #l # =#l B#l :

    -otenirea multipl este facilitatea oferit de unele limbaje de pro1ramare ca o class moteneasc /prin extindere0 membri ai mai multor clase.

    Interfeele reprezint o modalitate de a declara un tip const%nd numai din constante i

    din metode abstracte. #a sintax! o interfa este asemntoare unei clase! cudeosebirea c n loc de class trebuie precizat! interface! iar metodele nu au corp!acesta fiind nlocuit cu C+D.#a i n cazul claselor abstracte! este evident c nu pot fi create obiecte de tipul uneiinterfee.

    #%mpurile unei interfee au n mod implicit modificatorii static i final! decisunt constante.

    -etodele interfeelor sunt ntotdeauna publice i au n mod implicitmodificatorul abstract. 9n plus ele nu pot fi statice! deoarece fiind abstracte! nu

    pot fi specifice claselor.

    3rice interfa este 1%ndit pentru a fi ulterior implementat de o clas! n caremetodele interfeei s fie redefinite! adic s fie specifice aciunile ce trebuientreprinse. Eaptul c o clas # implementeaz o interfa I trebuie specificat prininserarea informaiei implements I n antetul clasei.

    Ex. interface I*c&ar cFDaD+ int iFG+void scrie/0+

    ,class # implements I*

    public void scrie/0* I3.Hriteln/c< ;i0+,,

    Obs. $ o interfa poate extinde oric%te interfee$ dac o clas implementeaz doar unele din metodele unei interfee! atunci

    ea trebuie declarat cu abstract$ spre deosebire de interfee /care sunt limitate la constante i anunuri de

    metode0! clasele abstracte pot avea implementri pariale! metode statice!membri cu modificatorul protected! c%mpuri care nu sunt finale

    $ o clas poate implementa oricte interfee, dar poate extinde o singurclas

    ac o clas extinde o alt clas i implementeaz una sau mai multe interfee! atuncitrebuie anunat nt%i extinderea i apoi implementarea! ca de ex

    class # extends K implements I4! I5! I6+

    #a i clasele! interfeele pot fi extinse. 3 interfa I poate extinde oric%te interfee! nacest mod adu1%ndu$se la I noi constante i /anunuri0 de metode.

    :ste permis ca o interfa ce extinde alt interfa s conin o constant cu acelainumeLL

    e ex. pentru urmtoarea structur de interfee

  • 7/25/2019 Clase Interene

    4/7

    este posibil ca n una sau mai multe dintre interfee s fie declarat o constant c.eosebim 5 cazuri

    40 #onstanta c este redeclarat n interfaa o referire la c constituie o referire laconstanta c din . utem face referire i la constantele din celelalte interfee

    prin =.c! B.c i @.c.50 #onstanta c nu este redeclarat n interfaa o referire la c este corect dac

    exist un unic drum de interfee ce Mcoboar< n ! drum n care c poate fideclarat de mai multe ori+ n acest caz referirea are ca obiect cea maiMrecent< declarare a c%mpului! adic cea din interfaa cea mai apropiat de .ac c este declarat pe mai multe drumuri de interfee ce Mcoboar< n !compilatorul va semnala c este vorba de o referire ambi1u. ac n constanta c nu poate fi re1sit pe nici un drum de interfee ce ajun1e n !atunci va fi semnalat din nou eroare.

    ac presupunem c n = i n B /sau n supertipurile lor0 apare o metod cu acelainume! deosebim 6 situaii

    40 dac metodele au si1naturi diferite! vor fi motenite ambele metode+50 dac metodele au si1naturi e1ale i acelai tip pentru valoarea ntoars! va fi

    motenit o sin1ur metod+60 dac metodele au aceiai si1natur! iar tipurile valorilor ntoarse difer! atunci

    motenirea nu va fi posibil /eroare de compilare0.

    Obs.40 9n clasele # i ! redefinirea metodei met s$a fcut cu precizarea

    modificatorului public. Acest lucru este obli1atoriu! pentru c altfel arfi fost folosit modificatorul implicit! dar o redefinire nu poate firestrictiv n privina drepturilor de acces.

    50 in metoda principal nu putem invoca implementarea lui met dininterfee! deoarece o metod static poate accesa numai c%mpurile imetodele statice ale clasei+ pe de alt parte ns! o metod anunat ntr$o interfa nu poate fi redefinit printr$o metod static! deci nu putem

    preciza atributul static pentru metoda met din interfee.

    Implementarea interfeelor

    Eie o clas care implementeaz dou interfee A! K i extinde o clas #.resupunem c n toate clasele apare un c%mp cu acelai nume =.

    /trebuie specificat super.x pentru c%mpul din superclas0

  • 7/25/2019 Clase Interene

    5/7

    I4

    #4

    I5

    #5

    In

    #n

    .......

    #

    -otenirea metodelor interfeelor are loc n modul descris la extinderea interfeelor!deci toate metodele motenite din interfee trebuie implementate. ac o metod cuacelai nume i aceeai si1natur apare n superclas i n interfeele implementate!atunci

    dac precizm n # o implementare a metodei! ea va constitui o redefinire

    a metodei din superclas+ la aceasta fc%ndu$se referire /apel0 prin super dac n # nu este precizat o implementare a metodei! atunci metoda

    /motenit0 din superclas constituie implementarea metodei din interfee!cu condiia ca ea s aib modificatorul public.

    Afieaz rezultatul4 5 6 74 5 6 4

    Obs. ob4 are tipul declarat A i tipul real ! ceea ce face ca metoda scrie prinintermediul acestui obiect s se refere la metoda scrie din clasa #! iar referina ob4.xs se adreseze constantei x din interfaa A.

    Iniialiarea interfeelor

    #um c%mpurile unei interfee sunt statice! este important ordinea n care ele sunt

    declarate. /vezi iniializarea claselor pa1. 640

    Iniializarea unei interfee nu implic iniializarea superinterfeelor sale.

    4

    NF6NNF76

    Obs.$ B.x este o referire la un c%mp constant! deci nu conduce la iniializarea interfeei =$ .N este o referire la un c%mp neconstant declarat n B i ca urmare aceast interfaeste iniializat. Aceasta nu conduce ns la iniializarea superinterfeei =. easemenea! nici interfaa nu este iniializat! dei numele ei apare n referirea .N

    !eol"area #n Ja"a a problemei mo$tenirii multiple

    O presupunem c plec%nd de la clasele #4! #5! ...! #n dorim s construim o nouclas care s moteneasc unele dintre metodele lor. Java permite doar moteniresimpl! deci va fi necesar s apelm la interfee.

    -odalitatea de rezolvare a problemei motenirii multiple prezentat este independentde numrul de clase motenite.

    Vom folosi urmtoarea structur de interfee i clase

  • 7/25/2019 Clase Interene

    6/7

    #lasele #4! #5! ...! #n implementeaz respectiv metodele anunate n interfeele I4!I5! ....! In! iar clasa # implementeaz toate interfeele I4! I5! ...! In. Vom explica doarmodul n care clasa # motenete implementrile din #4 ale metodelor anunate n I4/restul la fel0. eci vom presupune situaia n care # trebuie s extind doar clasa #4.

    9n clasa # vom declara i crea un obiect 3b4 de tipul #4 /se presupune c n clasa #se tie ce implemetare a interfeei I4 trebuie folosit0. Atunci pentru fiecare metodmet implementat de #4 introducem n clasa # metoda metcu aceiai si1natur iav%nd una din formele

    tip met/...0 *return 3b4.met/...0+,void met/80 *3b4.met/80+,

    dup cum metoda ntoarce sau nu o valoare.

    roduce la ieirex4 4

    Obs.utem declara variabile av%nd ca tip numele unei interfee i putem atribui uneiastfel de variabile un obiect care implementeaz interfaa.

    9n exemplul prezentat nu este necesar ca # s tie care este clasa ceimplementeaz pe I4! ci poate afla acest lucru prin intermediul unui constructor! decila crearea unei instanieri a lui #! putem preciza ce implementare a lui I4 sfoloseasc. -ai mult! putem folosi implementri diferite pentru redefinirea unormetode diferite.

    9n exemplul urmtor interfaa = este implementat de clasele #x4 i #x5! dar i declasa # ale crei metode folosesc acelai mecanism invoc n fapt! metodele cuacelai nume ale claselor #x4 i #x5 prin instanieri ale acestora.

    Oe obine la ieirex4 5

    Obs.ac n loc de = 3b4FneH #x4/0+ = 3b5FneH #x5/0+ se folosete= 3b4FneH #x5/0+ = 3b5FneH #x4/0+

    la ieire avemx5 4

    Clase interne

    #lasele$ care sunt membrii unui pac&et sunt considerate clase de nivel superior.

  • 7/25/2019 Clase Interene

    7/7

    #lasele se pot declara ntr$o alt clas P ele se mpart n 5 cate1orii$ clase de nivel superior este vorba de membrii statici ai unei clase de nivel

    superior+ aceste clase au deci acelai statut cu clasele membre ale unuipac&et

    $ clase interne P care nu sunt de nivel superior

    /ntr$o clas de nivel superior se poate plasa i o interfa0

    9ntr$un bloc sau n corpul unei metode putem defini clase P la fel cum putemdefini variabile locale! acestea sunt clasele interne.

    3 clas intern poate conine la r%ndul ei o clas intern. Instanierea unei clase interne este asociat instanierii curente a clasei care o

    conine! drept urmare clasa intern poate accesa direct c%mpurile clasei ce ocuprinde.

    3 clas care este membru static al unei clase nu poate folosi direct c%mpurileclasei ce o cuprinde /acest lucru poate fi realizat indirect! prin crearea unui obiect

    ce instanieaz clasa al crui membru este0. 3 clas intern nu poate fi folosit direct n clasa n care a fost declarat i n

    descendenii /n arborele de clase ai0 acesteia. omeniul ei de vizibilitate este celal unui c%mp! respectiv al unei variabile locale.

    Clase anonimesunt clase fr nume. 3 clas anonim apare ntr$o neH OuperA/...0*8,

    prin care clasa anonim extinde o clas sau implementeaz o interfa OuperA i princare este creat un obiect al clasei anonime.

    Obs. #rearea de clase anonime permite extinderea implicit a unei clase i

    implementarea implicit a unei interfee /fr a folosi extends sau implements0.Aceast te&nic este lar1 folosit n lucrul cu interfee 1rafice.

    Obs. $ clasa A are un constructor i o metod fr aciune$ n clasa A$# apare metoda principal! n care obiectul 3bA /av%nd tipul

    declarat A0 este creat ca tip real o clas anonim care extinde clasa abstract A. #lasaanonim