Erinevus abstraktse klassi ja liidese vahel Java

Peamised erinevused abstraktse klassi ja liidese vahel Java

  • Liideses saab klass rakendada mitut liidest, samas kui klass saab pärida ainult ühe abstraktse klassi.
  • In Interface pole juurdepääsu modifikaatoreid. Eeldatakse, et kõigel, mis on liideses määratletud, on avalik modifikaator, samas kui abstraktsel klassil võib olla juurdepääsu modifikaator.
  • Liides ei saa sisaldada andmevälju, samas kui abstraktsel klassil võib olla andmevälju.
  • Liidesed aitavad määratleda klassi perifeerseid võimeid, samas kui abstraktne klass määratleb klassi identiteedi.

Liides vs abstraktne klass Java

Mis on abstraktne klass?

Klassi, mille deklaratsioonis on abstraktne märksõna, nimetatakse abstraktseks klassiks. Abstraktsetes klassides peaks olema null või rohkem abstraktseid meetodeid. st meetodid ilma kehata. Sellel võib olla mitu konkreetset meetodit. Abstraktsed klassid võimaldavad teil luua konkreetsete klasside kavandeid. Kuid pärimisklass peaks rakendama abstraktset meetodit. Abstraktseid klasse ei saa instantseerida.

Liideste kasutamise olulised põhjused

  • Selle saavutamiseks kasutatakse liideseid abstraktsioon.
  • Mõeldud dünaamilise meetodi eraldusvõime toetamiseks käitusajal
  • See aitab teil saavutada lahtise haake.
  • Võimaldab eraldada meetodi määratluse pärimishierarhiast

Abstraktse klassi kasutamise olulised põhjused

  • Abstraktsed klassid pakuvad alamklasside jaoks vaikefunktsioone.
  • Pakub malli tulevaste konkreetsete klasside jaoks
  • Aitab määratleda selle alamklassidele ühise liidese
  • Abstraktne klass võimaldab koodi korduvkasutamist.

Mis on liides?

Liides on kavand, mida saab kasutada klassi realiseerimiseks. Liides ei sisalda konkreetseid meetodeid (meetodid, millel on kood). Kõik liidese meetodid on abstraktsed meetodid. Liidest ei saa instantseerida. Liideseid rakendavaid klasse saab aga instantseerida. Liidesed ei sisalda kunagi eksemplari muutujaid, kuid need võivad sisaldada avalikke staatilisi lõppmuutujaid (st konstantseid klassi muutujaid)

Erinevus liidese ja abstraktse klassi vahel Java

Abstraktne klass võimaldab teil luua funktsioone, mida alamklassid saavad rakendada või alistada, samas kui liides võimaldab teil funktsionaalsust ainult määrata, kuid mitte seda rakendada. Klass saab laiendada ainult ühte abstraktset klassi, samas kui klass saab rakendada mitut liidest.

parameetrid Interface Abstraktne tund
Kiirus Aeglane kiire
Mitu pärandit Rakendage mitu liidest Ainult üks abstraktne klass
struktuur Abstraktsed meetodid Abstraktsed ja konkreetsed meetodid
Millal kasutada Tuleviku täiustamine Iseseisvuse vältimiseks
Pärimine/ rakendamine Klass võib rakendada mitut liidest Klass saab pärida ainult ühe abstraktse klassi
Vaikerakendus Liidesesse uut kraami lisades on õudusunenägu kõigi juurutajate leidmine ja äsja määratletud kraami juurutamine. Abstract Classi puhul saate kasutada vaikerakendust.
Juurdepääsu modifikaatorid Liidesel pole juurdepääsu modifikaatoreid. Kõik liideses määratletud on avalikud modifikaatorid. Abstract Class võib omada juurdepääsu modifikaatorit.
Millal kasutada Parem on kasutada liidest, kui erinevad rakendused jagavad ainult meetodi allkirja. Väärtustüüpide polümorfne hierarhia. Seda tuleks kasutada siis, kui erinevatel sama tüüpi rakendustel on ühine käitumine.
Andmeväljad liides ei saa sisaldada andmevälju. klassis võivad olla andmeväljad.
Mitme pärimise vaikeseade Klass võib rakendada mitmeid liideseid. Klass pärib ainult ühe abstraktse klassi.
Täitmine Liides on abstraktne, nii et see ei saa anda koodi. Abstraktne klass võib anda täieliku vaikekoodi, mis tuleks tühistada.
Accessi modifikaatorite kasutamine Meetodi, atribuutide jms jaoks ei saa kasutada juurdepääsu muutjaid. Võite kasutada abstraktset klassi, mis sisaldab juurdepääsu muutjaid.
Kasutus Liidesed aitavad määratleda klassi perifeerseid võimeid. Abstraktne klass määratleb klassi identiteedi.
Määratletud väljad Ühtegi välja ei saa määratleda Abstraktne klass võimaldab määratleda nii välju kui ka konstante
Pärisosa Liides võib pärida mitu liidest, kuid ei saa pärida klassi. Abstraktne klass võib pärida klassi ja mitu liidest.
Konstruktor või hävitajad Liides ei saa deklareerida konstruktoreid ega hävitajaid. Abstraktne klass võib deklareerida konstruktoreid ja hävitajaid.
Laienduste limiit See võib laiendada mis tahes arvu liideseid. See võib korraga laiendada ainult ühte klassi või ühte abstraktset klassi.
Abstraktne märksõna Abstraktse liidese märksõna puhul on meetodi abstraktseks deklareerimiseks valikuline. Abstraktses klassis on abstraktne märksõna meetodi abstraktseks kuulutamiseks kohustuslik.
Klassi tüüp Liidesel võivad olla ainult avalikud abstraktsed meetodid. Abstraktsel klassil on kaitstud ja avalikud abstraktsed meetodid.

Liidese ja abstraktse klassi näidiskood Java

Järgmine on näidiskood liidese ja abstraktse klassi loomiseks Java

Liidese süntaks

interface name{
//methods
}

Java Liidese näide:

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();
    }
}

Abstraktse klassi süntaks

abstract class name{
    // code
}

Abstraktse klassi näide:

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));
    }
}

Võta see postitus kokku järgmiselt: