CodeGym /Java blog /Véletlen /Java absztrakt módszer és osztályok
John Squirrels
Szint
San Francisco

Java absztrakt módszer és osztályok

Megjelent a csoportban
Az absztrakt módszerek a Java hatékony eszközei, és még több lehetőséget adnak ennek az objektum-orientált nyelvnek a polimorfizmus terén. A Java absztrakt metódusával létrehozható egy alapkeret egy egész programhoz, és szükség szerint módosítható.Java absztrakt módszer és te - 1

Mi az absztrakt módszer?

Az absztrakt módszer olyan módszer, amelynek nincs megvalósítása. Vagyis csak deklarációja van, így ismeri a nevet, a visszatérési típust és a változókat, amelyeket elfogad. Íme egy példa egy alapvető absztrakt módszerre:

public abstract int example(int a1, int a2);
Ha megnézi ezt a metódust, láthatja, hogy egy egész számot ad vissza, és két egész számot fogad el argumentumként. Nem lehet tudni, hogyan valósítják meg ezt a módszert. Ennek az az oka, hogy a megvalósításhoz felül kell írni. Amikor absztrakt metódust hoz létre java-ban, be kell tartania néhány irányelvet, különben a program nem fog megfelelően fordítani. Emlékezik:
  • A Java absztrakt metódusainak nincs megvalósítása. Azaz soha nem követheti őket göndör fogszabályzó és test, amely megmondja, hogyan kell használni a módszert. Csak pontosvesszővel végződik.

  • Ha létrehoz egy absztrakt metódust, az csak egy absztrakt osztályba helyezhető. Ez azt jelenti, hogy nem lehet olyan konkrét osztály, amelyen belül van absztrakt metódus.
    én. Megjegyzendő, hogy ha van egy absztrakt osztályunk, az tartalmazhat konstruktorokat. Ennek azonban nem kell absztrakt módszerrel rendelkeznie.

  • Amikor egy konkrét osztály kiterjeszt egy absztrakt osztályt, akkor a szülőosztály összes absztrakt metódusát is meg kell valósítania, különben nem lehet konkrét, és absztraktnak kell nyilvánítania.

Az utolsó kettő kissé zavaró lehet, ezért azonnal tisztázzuk.

Absztrakt Java osztályok kiterjesztése

Tegyük fel, hogy olyan alapformákról szeretnénk programot írni, amelyek kerületet és területet adnak vissza. Tehát létrehozunk egy szülő absztrakt osztályt. De mivel minden alakzatnak megvannak a maga szabályai, mindegyiket másképp kell kiszámítani, ezért az absztrakt Shape osztályt így írjuk :

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

abstract double area();
  		abstract double perimeter();
}
Most, ha valóban használni akarjuk ezeket az absztrakt metódusokat, ki kell terjesztenünk a Shape absztrakt Java szülőosztályt , majd példányosítanunk kell a metódusokat. Tehát minden betonosztálynak meg kell valósítania a területi és kerületi absztrakt módszereket.

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());
  
    } 
} 
A konzol kimenete ezután így néz ki:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Vegye figyelembe, hogy a Quadrilateral osztálynak nem kell példányosítania a Shape(String name) konstruktort a Shape szülőosztályból . Ez azért van, mert ez nem egy elvont módszer. Ha azonban csak egy területet vagy kerületet valósított meg egy osztályban, az új osztálynak absztraktnak kell lennie, mert nem tartalmazza mindkettőt. Az Interfészek alkalmazásban absztrakt módszereket is használhat.

Absztrakt Java módszerek interfészekkel

Tekintsük át gyorsan, mi az interfész, és miben különbözik az absztrakt osztálytól. Egy interfészben az interfészben deklarált változók nyilvánosak, statikusak és véglegesek. Másrészt az absztrakt osztályoknak csak nem végleges változói vannak. A felületen alapértelmezés szerint minden nyilvános. Egy absztrakt osztálynak lehet privát, védett, nyilvános stb. része. Végül egy osztály nem bővíti ki az interfészt, hanem megvalósítja azt. A JDK 8 előtt egy interfész nem tartalmazhatott mást, csak absztrakt metódusokat. Mostantól egy interfésznek lehet alapértelmezett és statikus metódusa. Emiatt a bevált gyakorlatok eltávolodtak az absztrakt módszerek bővíthető sablonként való használatától, és az interfészekre és azok megvalósítására összpontosítottak. Tehát ha az alakzatot interfészként hozná létre , majd négyszögként valósítaná meg, hogy nézne ki? Először is meg kell szüntetni a Shape(String name) konstruktort. Így nézne ki csak a két absztrakt módszerrel:

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); 
    	  } 
}
Végül, az új Négyszög használata a Shape interfész megvalósításaként nagyjából ugyanaz lenne:

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());
  
    } 
}
A konzol kinyomtatása pedig így nézne ki:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Ha többet szeretne megtudni az interfészek és az absztrakt osztályok közötti különbségekről, itt talál további információt.

De miért használjunk absztrakt Java-módszereket?

Számos oka van annak, hogy miért használnak absztrakt módszereket a Java nyelven, és miért kell kényelmesen használni őket. Íme három gyors ok, amiért érdemes ezeket használni, amikor megfelelő.
  1. Kerülje az erőfeszítések megkettőzését – Tekintse vissza példakódolásunkat; képzelje el, hogy Önnek és csapatának osztályokat kellett létrehoznia a téglalaptól eltérő alakzatokhoz. Hány különböző módszer létezik az osztály megtervezésére? Tíz? Tizenöt? És ez egy egyszerű probléma. Képzelj el valami sokkal összetettebbet. Ön és csapata százféle módszert találhat ki. Akkor azzal az ijesztő feladattal kell szembenéznie, hogy összefonja őket egy koherens programmá. Ezzel el is érkeztünk a következő ponthoz: a megvalósítás meghatározásához.

  2. A Java absztrakt metódusai lehetővé teszik a használat és a megvalósítás meghatározását – Ha absztrakt osztályt vagy interfészt használ, és a tervezés során absztrakt metódusokat használ, akkor meghatározza, hogy mások hogyan kommunikáljanak az Ön felületével. Ez lehetővé teszi számukra, hogy tudják, milyen változókat kell használniuk, és milyen hozamtípusokra számíthatnak.
    Bár felülírhatják őket, és konkrét osztályokat hozhatnak létre, amelyek egyedi módon valósítják meg az interfészt, Ön mégis kőbe véste a kód alapvető felhasználását. Ha valaki meg akarja valósítani az Alakzatot, akkor felül kell írnia vagy végre kell hajtania a kerületet és a területet is.

  3. Olvashatóság és hibakeresés – Az absztrakt metódusok javítják a kód olvashatóságát. Amikor olyan osztályt ír, amely interfészt valósít meg, tudja, mit kell keresnie. Tudja, hogy az interfész minden absztrakt metódusa benne lesz a megvalósításban, és ez megkönnyíti az olvasást és a hibák felderítését. Az absztrakt módszerek csak a kezdete annak, hogy megtanuljuk, hogyan kell helyesen használni a polimorfizmust Java-ban és más objektum-orientált nyelvekben. Amikor elkezdi megérteni és használni őket, kódolási utazásának egy teljesen új fejezete kezdődik.

Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION