Scris de Alex Rodríguez
Coding LearnPragramar.com: CU00696B
Conceptul de interfață multiplă și moștenire în Java. Unelte.
În secțiunile anterioare ale tutorialului am studiat conceptele de moștenire și polimorfism. Până acum am considerat scenarii în care o clasă moștenește numai de la o altă clasă. Ar fi posibil să se ridice un scenariu în cazul în care o clasă moștenește de la mai mult de o clasă (moștenire multiplă)?
Schița figurii anterioare ar reprezenta că vor exista clase ca profesormetor care va moșteni două clase: profesor și lector. Acesta ar fi un caz de moștenire multiplă și ar reprezenta că subclasa împărtășește caracteristicile celor două superclase și, de asemenea, are caracteristicile sale specifice. Moștenirea multiplă, pentru coerența programelor și a limbilor are o complexitate relativ ridicată. Prin urmare, unele limbi orientate pe obiect permit acest lucru și alții nu. Java nu permite o moștenire multiplă, dar în schimb are construcția numită „interfață” care permite o formă de simulare limitată sau implementare a moștenirii multiple. divid id = „0B44970916”> am deja a fost discutată conceptul de interfață în aluzie la semnătura metodelor sau a informațiilor publice ale clasei. De asemenea, am făcut o primă aproximare la interfața pe termen în Java și ca o similă, am spus că ar putea fi considerată o regulă de urbanism Într-un oraș. Să mergem să aprofundați conceptul de interfață în cadrul Java. O interfață este o construcție similară unei clase abstracte în Java, dar cu următoarele diferențe: divid id = „0B44970916”> a) în antet interfața cu cuvinte cheie este utilizată în locul clasei de clasă sau abstractă și public fără a fi nevoie să declare, adică nu trebuie să puneți publicul abstract Că, în mod implicit, toate metodele sunt abstracte publice. Prin urmare, o interfață în Java nu implementează niciunul dintre metodele care declară: Niciuna dintre metodele dvs. nu are un corp. DIV id = „0B44970916”> c) Interfețele nu au nici un constructor.
d) O interfață acceptă numai câmpurile de tip „public static”, adică câmpurile de clasă, publice și constante. Nu este nevoie să includeți cuvintele publice publice, deoarece toate Câmpurile vor fi tratate ca și cum ar fi vorba de aceste cuvinte. Amintiți-vă că staticul a fost echivalent cu „clasa” și finala „constantă”. Interfețele pot fi un loc interesant pentru a declara constante care vor fi utilizate de diferite clase în programele noastre.
e) O clasă poate deriva dintr-o interfață în același mod în care poate fi derivă dintr-o altă clasă. Cu toate acestea, se spune că interfața este implementată (implementări), Nu se extinde (extinde) pentru subclasele sale. Prin urmare, să declare moștenirea unei interfețe, este utilizată implementarea cuvântului cheie În loc de extindere.
divid id = „0B44970916”> iv id = „0B44970916”
O clasă poate fi implementată una sau mai multe interfețe în Java (este indicată cu implementarea Interfață1, NameInface2, … etc.), dar poate extinde doar o clasă. Implementarea mai multor interfețe într-o singură clasă este cel mai apropiat lucru pe care Java are la multiple moștenire.
DIV id = „0B44970916”> Putem declara variabile ale tipului de interfață, dar pentru a le inițializa o clasă specifică care o implementează De exemplu, lista < șir > millist; Declară o variabilă cu tipul interfeței listei. Inițializare millist = lista nouă < șir > (); Nu este posibil deoarece nu puteți crea un obiect de tipul definit de o interfață. În Schimbarea Milista = Noua LinkedList < șir iv Id = „0282498DD0” (); Da, este valabil. DIV id = „0B44970916”> Vom spune că o interfață în Java definește un tip a cărei metode sunt toate fără implementare și echivalentă cu o moștenire multiplă (clase abstracte) într-o clasă.Dacă o clasă implementează o interfață, se poate întâmpla:
a) care a implementat metodele de suprascriere a acestora (poate fi o clasă specifică).
b) care nu implementează metodele interfeței: va fi o clasă abstractă și trebuie efectuată de către cuvântul cheie rezumat pe antetul său pentru ao indica.
Vedem că interfețele sunt identificate de Bluej cu < < interfață > > pe partea superioară a pictogramei dvs. În cadrul acestor clase, relațiile sunt determinate de acest cod:
divid id = „C9C628E7D2”>
Actorul de interfață publică {…}: Definește Actorul actor AppronerapraGragargar.com Interfață .
Student de clasă publică extinde persoana {…}: Definește clasa elevilor ca o extensie a clasei de persoană.
obiect obiect de interfață publică.
Vehiculul de clasă publică Actor, Objectinerte {…}: Definește că clasa vehiculului implementează două interfețe, interfața actorului și interfața obiectului, adică faptul că un vehicul este la o dată actor și objinte.
Clasificarea clasei publice extinde vehiculul {…}: Definește clasa mașinii ca o extensie a clasei de vehicule.
Clasa publică Bicycle Exten DS Vehicul {…}: Definește clasa de biciclete ca o extensie a clasei vehiculului.
iv id = „0B44970916” O clasă poate moșteniți de la altul și implementați una sau mai multe interfețe. În acest caz, în primul rând, relația de moștenire este plasată pe suport și apoi interfețele care implementează. De exemplu, în această schemă: divid id = „A9A251417A”>
Definiția clasei de copac ar fi astfel: copacul de clasă publică extinde actorul de implementare a legumelor {…}. Clasa moștenește de la actorul de legume și implementează.
DIV ID = „0B44970916”> Cum să știți dacă o clasă este un candidat care să fie definit ca o interfață? divid C35318B644 „> a) Dacă avem nevoie de orice metodă cu corpul deja știm că nu va fi o interfață deoarece toate metodele unei interfețe trebuie să fie abstracte. DIV ID =” C35318B644 „> b) Dacă avem nevoie de o clasă” moștenită „de mai mult de o superclassă, acele superclase sunt candidații care urmează să fie interfețe. DIV ID =” C35318B644 „> c) în unele Cazuri Este la fel de viabilă care definește o clasă ca o interfață ca o clasă abstractă, dar plasată în această situație va prefera să opteze pentru o interfață deoarece este mai flexibilă și extensibilă: ne va permite să implementăm mai multe interfețe (profităm din moștenirea multiplă a interfețelor). În schimb, o clasă nu poate moșteni mai multe clase. divid id = „C35318B644”>
amintiți-vă că câmpul S declarate sunt câmpuri statice, chiar dacă nu este indicat în mod specific:
Actor de interfață publică {
ID ID = „3ABA93DE6”> int inactiv = 0; /// … Restul codului de interfață Exemplu LearnPragramar.com }
În acest caz, active și inactive se comportă ca fiind finală statică publică (constantă) pentru toate clasele care implementează această interfață.
DIV ID = „0B44970916”> Care este unul dintre principalele interese ale utilizării interfețelor? Fiind capabil să folosească polimorfismul: de exemplu, să puteți aduna într-o obiecte de colectare a tipului de interfață, dar care sunt implementate în diferite tipuri. Sau să fie capabili să trateze obiecte de diferite tipuri, dar aparțin aceleiași supertype deoarece implementează o interfață. divid id = „0B44970916”>
Exercițiu
Răspunsuri Următoarele întrebări:
DIV id = „0B44970916”> a ) Este o clasă care moștenește două clase în Java?
b) O interfață Java poate avea metode care includ o declarație?Poate o interfață Java să aibă metode care includ o declarație de sistem.out.println?
divid id = „0B44970916”> c) este un obiect Java al tipului definit de o interfață? Poate un obiect Java să fie în același timp de tipul definit de o interfață și tip definit de o clasă care nu implementează interfața? Un obiect Java poate fi în același timp de tipul definit de o interfață și tipul definit de o clasă care implementează interfața? divid id = „0B44970916”> pentru a verifica dacă răspunsurile dvs. sunt Corect vă puteți consulta în forumuri LearnPragramar.com.
iv id = „0B44970916”
iv id = „0B44970916”