De ce avem nevoie de interfețe în Java? [închis] (Programare, Java, Interfață)

Vinoth Kumar a intrebat.

În Java, pentru a implementa moștenirea multiplă, folosim interfețe. Este aceasta singura utilizare a interfețelor? Dacă da, care este principala utilizare a interfețelor în Java? De ce avem nevoie de interfețe în Java?

Comentarii

  • posibil duplicat al Întrebare: De ce implementăm interfețe? –  > Por Thilo.
  • De asemenea, o explicație bună aici. –  > Por Bruce Sun.
5 răspunsuri
utilizator377136

Aș spune că principala utilizare este polimorfismul, sau capacitatea de a efectua aceeași operație pe mai multe obiecte diferite. Dacă diferite obiecte implementează toate aceeași interfață și au aceeași metodă, puteți stoca toate aceste obiecte într-un Vector, de exemplu, și puteți itera prin Vector apelând acea metodă pe fiecare dintre ele.

Comentarii

  • Rob Sunt de acord cu tine, dar aș adăuga că, prin separarea conceptului de realizare a interfeței de cel de extindere a claselor (care de fapt se ciocnesc în c++), poți avea polimorfism fără moștenire multiplă –  > Por Andrea Sindico.
Thein

Mă gândeam, de asemenea, la modul în care sunt utilizate interfețele. Sper că acest lucru îi va ajuta și pe alții:

O interfață este un contract (sau un protocol, sau o înțelegere comună) a ceea ce pot face clasele. Atunci când o clasă implementează o anumită interfață, promite să furnizeze implementarea tuturor metodelor abstracte declarate în interfață. Interfața definește un set de comportamente comune. Clasele care implementează interfața sunt de acord cu aceste comportamente și furnizează propria implementare a comportamentelor. Acest lucru vă permite să programați la nivelul interfeței, în locul implementării efective. Una dintre principalele utilizări ale interfeței este furnizarea unui contract de comunicare între două obiecte. Dacă știți că o clasă implementează o interfață, atunci știți că acea clasă conține implementări concrete ale metodelor declarate în acea interfață și aveți garanția că veți putea invoca aceste metode în siguranță. Cu alte cuvinte, două obiecte pot comunica pe baza contractului definit în interfață, în loc de implementarea lor specifică.

În al doilea rând, Java nu acceptă moștenirea multiplă (în timp ce C++ o acceptă). Moștenirea multiplă vă permite să derivați o subclasă din mai mult de o superclasă directă. Acest lucru reprezintă o problemă în cazul în care două superclase directe au implementări conflictuale. (Pe care dintre ele să o urmeze subclasa?). Cu toate acestea, moștenirea multiplă își are locul. Java face acest lucru permițându-vă să „implementați” mai multe interfețe (dar nu puteți „extinde” decât dintr-o singură superclasă). Deoarece interfețele conțin doar metode abstracte, fără implementare efectivă, nu poate apărea niciun conflict între interfețele multiple. (Interfața poate conține constante, dar nu este recomandată. În cazul în care o subclasă implementează două interfețe cu constante conflictuale, compilatorul va semnala o eroare de compilare).

de la: http://www.ntu.edu.sg/home/ehchua/programming/java/J3b_OOPInheritancePolymorphism.html#zz-6.6

Comentarii

  • Este scopul interface Comparable este cuprins în răspunsul dumneavoastră? –  > Por overexchange.
Peter Tillemans

În plus față de aceste răspunsuri, aș spune că cea mai importantă utilizare a interfețelor este reducerea cuplării între componentele din software.

O interfață permite să reprezinte un acord între clase cu privire la modul în care acestea vor vorbi între ele fără a fi legate de implementările reale.

Acest lucru ne permite să înlocuim implementările cu altele (foarte util pentru testare sau pentru schimbarea cazurilor de utilizare) fără a modifica codul compilat.

Comentarii

  • Asta nu pare să aibă prea mult sens… –  > Por syclone.
Amadan

Aveți nevoie de ele pentru a vă putea tasta obiectele în afara ierarhiei.

De exemplu, obiectele care pot fi comparate pot fi cam oriunde în ierarhia obiectelor – nu trebuie să aibă un strămoș comun care să poată fi comparat. Strings pot fi comparate, Integers pot fi comparate, ați putea chiar să vă creați propriul obiect Frames care ar putea fi comparate (de exemplu, un cadru este „mai puțin” decât un alt cadru dacă este mai mult în prim-plan – adică dacă s-ar suprapune peste celălalt cadru). Astfel, dacă doriți să vă referiți la un lucru care poate fi comparat, ați fi obligat să declarați o variabilă cu cel mai general strămoș – în acest caz, Object. Acest lucru este prea general, pentru că atunci poate primi și valori care nu sunt comparabile (și ar da erori atunci când ați încerca să le comparați).

Prin urmare, interfața Comparable: selectează toate clasele care implementează funcționalitatea de comparare pe ierarhia subclasă-superclasă.

Danny Crossley

Unele coduri nu vor fi compilate fără ea.

De exemplu, în:

for (String name : list)
{
    System.out.print("
In foreach loop: name: " + name);
}

list trebuie să implementeze clasa java.lang.Iterable interface.

Comentarii

  • În esență, acest lucru este același lucru cu a spune că trebuie să folosiți ceva pentru că trebuie. Acest lucru nu înseamnă că în mod adecvat răspuns la întrebare. –  > Por rayryeng.
  • Știu asta. Pur și simplu subliniez faptul că trebuie să le folosim în acest caz, fie că ne place sau nu. Prefer să mă gândesc la aceasta ca la o analogie cu asamblarea unui P.C.: fără o anumită conformitate între conectorii hardware, înlocuirea unei piese, cum ar fi o sursă de alimentare sau un hard disk, ar fi mult mai dificilă dacă nu ar fi interschimbabile. Dacă acest lucru nu răspunde în mod adecvat la întrebare, îmi place să cred că cel puțin îi ajută pe oameni să înțeleagă de ce sunt de folos. –  > Por Danny Crossley.