Diferențele față de interfața de clasă abstractă

Full-stivă dezvoltator (Symfony, unghiular)

Care este diferența dintre o clasă abstractă din interfața în Java?

Totul se bazează pe conceptul de „stil“. În zilele vechi, adică, în timpul limbajului Simula, din care sa inspirat de la creatorii de C ++ au fost doar clase. Și pe baza claselor de sistem de tip. Iar mecanismul de moștenire a fost pus în aplicare așa cum este implementat doar pentru a economisi memorie, care, în acele zile a fost foarte scump.

Pentru a realiza polimorfism, ar trebui să fie în măsură să declare tipurile abstracte. A spune „orice rahat care are acest tip va funcționa așa cum ar trebui.“ Pentru că au existat clase abstracte în limbaje cum ar fi C ++. Pentru că, uneori, vrem să facem o compoziție de tipuri abstracte în C ++ puse în aplicare moștenire multiplă.

În Java, which atrage în mare parte inspirat din C ++ și Smalltalk, am decis să introducă o altă entitate - interfețe. Era un fel de mod simplificat pentru a stabili clasa de bază abstractă. Conform rezultatelor nu pentru a rezolva problema de diamant (sau rombul) din moștenire multiplă, sa decis să renunțe și lăsați clasele implementit mai multe interfețe.

Datorită acestui fapt, suntem capabili să facem ambele tipuri de melodii pe care vrem. Asta este tot diferența se reduce la faptul că, atunci când moștenesc dintr-o clasă abstractă, moștenim doar clase, în timp ce interfețe permit clasele noastre implementit tipuri abstracte.

În general, clasele abstracte sunt necesare atunci când aveți nevoie de moștenire. De obicei, este în situațiile în care aveți un număr de clase care au un tip comun de date abstracte (care este, nu puteți selecta cele mai slabe restricțiile de pe strămoș). De exemplu, dacă vom face un lanț de clase String <- Email, то тут нет смысла в абстрактных классах так как тип String уже включает в себе подмножество типов Email.

În general, java8 am introdus capacitatea de a avea o implementare de bază de interfețe, asa ca nu fi surprins dacă în timp, de cuvinte cheie care se extinde, în principiu, să refuze, să-și piardă esența.

Despre administrator și utilizatorul nu este foarte bun exemplu. Nu este necesar să învețe pe cei săraci. L-am folosit-o eu această grebla avansarea când scrieți un chat cu administrația. Cea mai bună politică - sistem de roluri clasice. În cazul în care rolul câmpului individuale este în model. Nici o moștenire în acest caz, nu este necesar. Și ce vei face daca nevoia de moderatori, moderatori, etc. Clasa pentru fiecare. D

totul depinde de tipul. Fiecare obiect are un tip. Interfață = un tip de clasă abstractă - tip + implementare. Este destul de simplu. Juzat că aceasta depinde de ceea ce ar trebui să fie în ierarhia de tip. Dacă aveți nevoie de o punere în aplicare de bază (reguli generale), apoi alegeți o clasă abstractă. În alte cazuri, atunci când aveți nevoie pentru a defini tipul de bază - interfețe.

Moștenirea lucru dăunător și este cel mai bine evitată dacă este posibil.

articole similare