În timp ce începeți cu java ca limbă principală, singurul lucru care ar trebui să vă fie în minte este să înțelegeți fiecare caracteristică nativă pe care o poate oferi limba. Întrucât java se referă la clase, are câteva modele de design îngrijite pe care dezvoltatorii să le urmeze. Datoria dvs. ca programator responsabil este să puneți la îndoială aceste modele de proiectare destul de des; după ce toți inginerii care au construit java au planificat să-l proiecteze așa cum este acum pentru un motiv. Deci, fără a pierde mult timp pe bârfe, permite să ne scufundăm ....

interfață

Java fiind un limbaj orientat pe obiecte vă oferă fericirea de a vă scrie codul sub formă de clase reutilizabile. Acum, ca cuvânt reutilizabil a fost folosit, este acolo pentru un motiv. Reutilizarea codului nu începe prin crearea obiectelor din clase, începe cu mult înainte; în timp ce creați clase în sine.

Deci avem Interfață, clasa Abstract și clasa Concrete.

PS: Interfața nu este o clasă.

Interfața este un plan pentru clasa dvs. care poate fi folosit pentru a implementa o clasă (abstract sau nu); punctul este că interfața nu poate avea metode concrete. Metodele concrete sunt acele metode care au un anumit cod în interiorul lor; într-un singur cuvânt - implementat. Interfața dvs. poate avea membri statici și semnături ale metodelor. Exemplul de mai jos vă va ajuta să înțelegeți cum să scrieți o interfață.

Declarația seamănă mult cu o clasă, dar în interfață există câteva reguli stricte pe care trebuie să le urmați:

  • Toate metodele pe care le declarați într-o interfață pot avea modificatori „statici”, „impliciți” sau „abstracte” (De la Java 8). Implicit sunt „abstract public”.
  • De la Java 8, metodele pot fi implementate (pot avea un corp de cod) într-o interfață numai dacă este declarată statică sau implicit. Metodele abstracte nu pot avea un corp; tot ce pot avea este o semnătură de metodă așa cum se arată în exemplul de mai sus.
  • Variabilele nu sunt permise în interfață. Prin urmare, orice declarație de date este „publică statică finală”; deci numai constante.
  • Interfețele se pot extinde alte interfețe (una sau mai multe), dar nu clase (abstract sau nu).
  • Interfețele nu pot fi instanțiate, deoarece nu sunt clase concrete.
  • Metodele și constantele nu pot fi declarate „private”, metodele nu pot fi declarate „finale”.

Clasele abstracte sunt puțin diferite de interfețe. Acestea sunt, de asemenea, utilizate pentru a crea planuri pentru clase concrete, dar clasele abstracte pot avea metode implementate. Clasele abstracte pot implementa una sau mai multe interfețe și pot extinde cel mult o clasă abstractă. Există un motiv logic pentru acest design, despre care vom vorbi mai târziu în această postare. Iată un exemplu de creare a clasei Abstracte.

Regulile declarației sunt următoarele:

  • O clasă poate fi o clasă abstractă fără a avea nicio metodă în interiorul ei. Dar, dacă are în el metode, trebuie să aibă cel puțin o metodă abstractă. Această regulă nu se aplică metodelor statice.
  • Deoarece clasele abstracte pot avea atât metode abstracte, cât și metode non-abstracte, prin urmare modificatorul abstract este necesar aici (spre deosebire de interfața unde sunt permise doar metode abstracte).
  • Membrii statici sunt permiși.
  • Clasele abstracte pot extinde alte cel mult o clasă abstractă sau concretă și pot implementa mai multe interfețe.
  • Orice clasă care nu implementează toate metodele abstracte ale superclasei sale trebuie să fie ea însăși o clasă abstractă.

Clasele concrete sunt lucrurile obișnuite pe care fiecare programator Java le-a întâlnit cu siguranță. Este ca implementarea finală a unui plan în cazul în care îl extindeți cu o super-clasă abstractă. O clasă concretă este completă în sine și se poate extinde și poate fi extinsă de orice clasă.

Nu există reguli neobișnuite de declarație pentru a vorbi despre faptul că toate metodele trebuie să fie concrete și poate extinde clasa abstractă sau concretă, precum și să implementeze mai multe interfețe. Singura condiție este ca toate metodele să fie implementate pentru ca aceasta să se califice ca o clasă concretă.

Acum, de dragul înțelegerii, să luăm în considerare un exemplu al unor interfețe, clase abstracte și clase concrete care vă pot ajuta să vă clarificați îndoielile cu privire la cine poate implementa și extinde ce. Voi pune câteva comentarii acolo unde este necesar vreodată. Un lucru de reținut este faptul că instrumentele cuvântul cheie este utilizat atunci când puteți implementa moștenirea, în timp ce extinde este obișnuit când avem câteva metode implementate pe care le putem folosi din moștenire.

PS: Java nu permite moștenirea mai multor clase, deoarece dacă două clase au două implementări diferite ale aceleiași metode, atunci compilatorul nu va ști pe care să le folosească; pe de altă parte, puteți moșteni mai multe interfețe, deoarece nu există nicio implementare pentru compilator care să fie confundată și depinde de dvs. cum doriți să o implementați.

Exemplul de mai sus s-ar fi putut ajuta la înțelegerea cazurilor de utilizare și sunt sigur că acum sunteți convins că nu este un design complicat, ci simpla ingeniozitate. Deci, ori de câte ori aveți nevoie de moștenire multiplă și de un plan clar și clar, care are doar designul și nu implementarea; te duci pentru interfață. Dacă nu aveți nevoie de moștenire multiplă, dar aveți nevoie de un mix de plan de proiectare și pre-implementare, atunci clasa abstractă este alegerea dvs.

Cunoștințele nepartajate sunt irosite - Clan Jacobs