Diferența dintre clasa abstractă și interfață în Java
Diferența cheie între clasa abstractă și interfață în Java
- În Interfață, o clasă poate implementa mai multe interfețe, în timp ce clasa poate moșteni o singură clasă abstractă.
- În Interfață nu are modificatori de acces. Tot ceea ce este definit în interiorul interfeței se presupune că are un modificator public, în timp ce Abstract Class poate avea un modificator de acces.
- Interfața nu poate conține câmpuri de date, în timp ce clasa abstractă poate avea câmpuri de date.
- Interfețele ajută la definirea abilităților periferice ale unei clase, în timp ce o clasă abstractă definește identitatea unei clase.
Ce este o clasă abstractă?
O clasă care are cuvântul cheie abstract în declarația sa se numește clasă abstractă. Clasele abstracte ar trebui să aibă zero sau mai multe metode abstracte. adică metode fără corp. Poate avea mai multe metode concrete. Clasele abstracte vă permit să creați planuri pentru clase concrete. Dar clasa care moștenește ar trebui să implementeze metoda abstractă. Clasele abstracte nu pot fi instanțiate.
Motive importante pentru utilizarea interfețelor
- Interfețele sunt folosite pentru a realiza abstracție.
- Proiectat pentru a sprijini rezoluția dinamică a metodei în timpul rulării
- Vă ajută să obțineți o cuplare liberă.
- Vă permite să separați definiția unei metode de ierarhia moștenirii
Motive importante pentru utilizarea clasei abstracte
- Clasele abstracte oferă funcționalitate implicită pentru subclase.
- Oferă un șablon pentru clasele specifice viitoare
- Vă ajută să definiți o interfață comună pentru subclasele sale
- Clasa abstractă permite reutilizarea codului.
Ce este o interfață?
Interfața este un model care poate fi folosit pentru a implementa o clasă. Interfața nu conține metode concrete (metode care au cod). Toate metodele unei interfețe sunt metode abstracte. O interfață nu poate fi instanțiată. Cu toate acestea, clasele care implementează interfețe pot fi instanțiate. Interfețele nu conțin niciodată variabile de instanță, dar pot conține variabile finale statice publice (adică variabile de clasă constantă)
Diferența dintre interfață și clasa abstractă în Java
O clasă abstractă vă permite să creați o funcționalitate pe care subclasele le pot implementa sau suprascrie, în timp ce o interfață vă permite doar să declarați funcționalitatea, dar nu să o implementați. O clasă poate extinde o singură clasă abstractă, în timp ce o clasă poate implementa mai multe interfețe.
parametrii | interfaţă | Clasa abstractă |
---|---|---|
Viteză | Încetini | Rapid |
Moșteniri multiple | Implementați mai multe interfețe | O singură clasă abstractă |
Structure | Metode abstracte | Metode abstracte și concrete |
Când să folosiți | Îmbunătățirea viitoare | Pentru a evita independența |
Moștenire/ Implementare | O clasă poate implementa mai multe interfețe | Clasa poate moșteni o singură clasă abstractă |
Implementare implicită | În timp ce adăugați lucruri noi la interfață, este un coșmar să găsiți toți implementatorii și să implementați lucruri nou definite. | În cazul clasei abstracte, puteți profita de implementarea implicită. |
Modificatori de acces | Interfața nu are modificatori de acces. Tot ceea ce este definit în interiorul interfeței este considerat modificator public. | Clasa abstractă poate avea un modificator de acces. |
Când să folosiți | Este mai bine să folosiți interfața atunci când diverse implementări au doar semnătura metodei. Ierarhia polimorfă a tipurilor de valori. | Ar trebui să fie utilizat atunci când diferite implementări de același fel au un comportament comun. |
Câmpuri de date | interfața nu poate conține câmpuri de date. | clasa poate avea câmpuri de date. |
Moștenire multiplă implicită | O clasă poate implementa numeroase interfețe. | O clasă moștenește o singură clasă abstractă. |
Punerea în aplicare | O interfață este abstractă, astfel încât nu poate furniza niciun cod. | O clasă abstractă poate oferi un cod complet, implicit, care ar trebui să fie suprascris. |
Utilizarea modificatorilor de acces | Nu puteți utiliza modificatori de acces pentru metodă, proprietăți etc. | Puteți utiliza o clasă abstractă care conține modificatori de acces. |
Folosire | Interfețele ajută la definirea abilităților periferice ale unei clase. | O clasă abstractă definește identitatea unei clase. |
Câmpuri definite | Nu pot fi definite câmpuri | O clasă abstractă vă permite să definiți atât câmpuri, cât și constante |
Moştenire | O interfață poate moșteni mai multe interfețe, dar nu poate moșteni o clasă. | O clasă abstractă poate moșteni o clasă și mai multe interfețe. |
Constructor sau destructori | O interfață nu poate declara constructori sau destructori. | O clasă abstractă poate declara constructori și destructori. |
Limita extensiilor | Poate extinde orice număr de interfețe. | Poate extinde o singură clasă sau o clasă abstractă la un moment dat. |
Cuvânt cheie abstract | Într-un cuvânt cheie de interfață abstractă, este opțional pentru declararea unei metode ca abstract. | Într-o clasă abstractă, cuvântul cheie abstract este obligatoriu pentru declararea unei metode ca abstract. |
Tipul clasei | O interfață poate avea doar metode abstracte publice. | O clasă abstractă are metode abstracte protejate și publice. |
Exemplu de cod pentru interfață și clasa abstractă în Java
Mai jos este un exemplu de cod pentru a crea o interfață și o clasă abstractă Java
Sintaxa interfeței
interface name{ //methods }
Java Exemplu de interfață:
interface Pet { public void test(); } class Dog implements Pet { public void test() { System.out.println("Interface Method Implemented"); } public static void main(String args[]) { Pet p = new Dog(); p.test(); } }
Sintaxa abstractă a clasei
abstract class name{ // code }
Exemplu de clasă abstractă:
abstract class Shape { int b = 20; abstract public void calculateArea(); } public class Rectangle extends Shape { public static void main(String args[]) { Rectangle obj = new Rectangle(); obj.b = 200; obj.calculateArea(); } public void calculateArea() { System.out.println("Area is " + (b * b)); } }