CodeGym /Blog Java /Aleatoriu /Metoda și clasele abstracte Java
John Squirrels
Nivel
San Francisco

Metoda și clasele abstracte Java

Publicat în grup
Metodele abstracte sunt un instrument puternic al Java și oferă acestui limbaj orientat pe obiect și mai multe capacități atunci când vine vorba de polimorfism. O metodă abstractă Java poate fi utilizată pentru a crea un cadru de bază pentru un întreg program și vă permite să ajustați după cum este necesar.Metoda abstractă Java și dvs. - 1

Ce este o metodă abstractă?

O metodă abstractă este o metodă care nu are implementare. Adică are doar o declarație, așa că știți numele, tipul de returnare și variabilele pe care le va accepta. Iată un exemplu de metodă abstractă de bază:

public abstract int example(int a1, int a2);
Când te uiți la această metodă, poți spune că returnează un număr întreg și acceptă două numere întregi ca argument. Ceea ce nu poți spune este cum este implementată această metodă. Asta pentru că pentru a-l implementa, trebuie să-l suprascrii. Când creați o metodă abstractă în java, trebuie să respectați câteva linii directoare, altfel programul dvs. nu se va compila corect. Tine minte:
  • Metodele abstracte Java nu au implementare. Adică, nu ar trebui să fie niciodată urmate de bretele și un corp care spune cum urmează să fie folosită metoda. Tocmai se termină cu punct și virgulă.

  • Dacă creați o metodă abstractă, aceasta poate fi pusă doar într-o clasă abstractă. Adică, nu poți avea o clasă concretă care să aibă o metodă abstractă în interiorul ei.
    i. Ca o notă secundară, dacă aveți o clasă abstractă, aceasta poate conține constructori. Totuși, nu trebuie să aibă o metodă abstractă.

  • Când o clasă concretă extinde o clasă abstractă, trebuie să implementeze, de asemenea, toate metodele abstracte ale clasei părinte sau nu poate fi concretă și trebuie declarată abstractă.

Aceste ultime două pot fi puțin confuze, așa că haideți să clarificăm asta imediat.

Extinderea claselor Java abstracte

Să presupunem că vrem să scriem un program despre formele de bază care să returneze perimetrul și aria. Deci creăm o clasă abstractă părinte. Dar pentru că fiecare formă are propriile reguli, fiecare trebuie calculată diferit, așa că scriem clasa abstractă Shape astfel:

abstract class Shape {
  		String shapeName = " ";
  		Shape(String name) { 
    			this.shapeName = name; 
  		} 

abstract double area();
  		abstract double perimeter();
}
Acum, dacă vrem să folosim efectiv aceste metode abstracte, trebuie să extindem clasa părinte Java abstractă Shape și apoi să instanțiem metodele. Deci fiecare clasă concretă trebuie să implementeze metodele abstracte de suprafață și perimetru.

class Quadrilateral extends Shape  
{ 
    double length, width; 
      
    Quadrilateral(double l, double w, String name) 
    { 
        super(name); 
        this.length = l; 
        this.width = w; 
    } 
      
    @Override
    public double perimeter()  
    { 
        return ((2*length)+(2*width));
    } 
      
    @Override
    public double area()  
    { 
        return (length*width); 
    } 
}

Implementing the Quadrilateral class would then look like this
class Main
{ 
    public static void main (String[] args)  
    { 
      
        // creating a Quadrilateral object using Shape as reference 
        Shape rectangle = new Quadrilateral(3,4, "Rectangle"); 
        System.out.println("Area of rectangle is " + rectangle.area()); 
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
  
    } 
} 
Ieșirea din consolă arată astfel:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Rețineți că clasa Quadrilateral nu trebuie să instanțieze constructorul Shape(Nume șir) din clasa părinte Shape . Asta pentru că nu este o metodă abstractă. Cu toate acestea, dacă ați implementat doar o zonă sau un perimetru într-o clasă, noua clasă ar trebui să fie abstractă, deoarece nu le include pe amândouă. De asemenea, puteți utiliza metode abstracte în Interfețe.

Metode Java abstracte cu interfețe

Să analizăm rapid ce este o interfață și cum diferă de o clasă abstractă. Într-o interfață, toate variabilele declarate într-o interfață sunt publice, statice și finale. Pe de altă parte, clasele abstracte au doar variabile nefinale. Totul dintr-o interfață este public implicit. O clasă abstractă poate avea privat, protejat, public etc. În cele din urmă, o clasă nu extinde o interfață, o implementează. Înainte de JDK 8, o interfață nu putea avea nimic în ea decât metode abstracte. Acum, o interfață poate avea metode implicite și statice. Din acest motiv, cele mai bune practici s-au îndepărtat de la utilizarea metodelor abstracte ca șabloane extensibile și s-au concentrat pe interfețe și implementarea acestora. Deci, dacă ar fi să creați Shape ca interfață și apoi să o implementați ca patrulater, cum ar arata? În primul rând, ar trebui să eliminați constructorul Shape(String name) . Ar arăta astfel doar cu cele două metode abstracte:

interface Shape {

  abstract double area();
  abstract double perimeter();
}


So the Quadrilateral class would then look like this:
class Quadrilateral implements Shape {  

  double length, width; 
      
    	  Quadrilateral(double l, double w) {
    
    	    this.length = l; 
    	    this.width = w; 
    	  } 
      
    	  @Override
    	  public double perimeter() {
     
    	    return ((2*length)+(2*width));
    	  } 
      
    	  @Override
    	  public double area() {
    
   	    return (length*width); 
    	  } 
}
În cele din urmă, folosirea noului Quadrilateral în timp ce implementează interfața Shape ar fi cam la fel:

class Main
{ 
    public static void main (String[] args)  
    { 
      
        // creating a Quadrilateral object using Shape as reference 
        Shape rectangle = new Quadrilateral(3,4); 
        System.out.println("Area of rectangle is " + rectangle.area()); 
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
  
    } 
}
Și imprimarea consolei ar arăta astfel:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Dacă doriți să explorați mai multe despre diferențele dintre interfețe și clasele abstracte, puteți găsi mai multe informații aici.

Dar de ce să folosiți metode abstracte Java?

Există multe motive pentru care sunt folosite metode abstracte în Java și de ce ar trebui să vă simțiți confortabil cu utilizarea lor. Iată trei motive rapide pentru care ar trebui să le folosești atunci când este cazul.
  1. Evitați dublarea eforturilor – Privește înapoi la exemplul nostru de codificare; imaginați-vă că dvs. și echipa dvs. aveți nevoie să creați clase pentru alte forme decât un dreptunghi. Câte moduri diferite există în care ai putea veni pentru a proiecta acea clasă? Zece? Cincisprezece? Și asta e o problemă simplă. Imaginați-vă ceva mult mai complex. Tu și echipa ta ai putea găsi o sută de moduri. Atunci te vei confrunta cu sarcina descurajantă de a le împleti într-un program coerent. Acest lucru ne duce la următorul nostru punct: definirea implementării.

  2. Metodele abstracte în Java permit definirea utilizării și implementării – Când utilizați o clasă sau o interfață abstractă și, prin proiectare, metode abstracte, definiți modul în care alte persoane vor interacționa cu interfața dvs. Acest lucru le permite să știe ce variabile ar trebui să folosească și la ce tipuri de returnări se pot aștepta.
    Deși le pot suprascrie și pot crea clase concrete care să vă implementeze interfața în moduri unice, tot veți stabili în piatră utilizarea de bază pentru codul dvs. Dacă cineva dorește să implementeze Shape, atunci trebuie să suprascrie sau să implementeze atât perimetrul, cât și zona.

  3. Lizibilitate și depanare – Având metode abstracte va îmbunătăți lizibilitatea codului dumneavoastră. Când scrii o clasă care implementează o interfață, știi ce să cauți. Știți că fiecare metodă abstractă din interfață va fi în implementare și asta face mai ușor de citit și de urmărit orice erori. Metodele abstracte sunt doar începutul învățării cum să utilizați corect polimorfismul în Java și alte limbaje orientate pe obiecte. Când începi să le înțelegi și să le folosești, va începe un capitol complet nou al călătoriei tale de codare.

Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION