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

