Különbség az absztrakt osztály és az interfész között Java
Főbb különbség az absztrakt osztály és az interfész között Java
- Az Interfészben egy osztály több interfészt is megvalósíthat, míg az osztály csak egy Absztrakt osztályt örökölhet.
- Az In Interface nem rendelkezik hozzáférésmódosítókkal. Feltételezzük, hogy az interfészen belül minden definiált rendelkezik nyilvános módosítóval, míg az Abstract Class rendelkezhet hozzáférésmódosítóval.
- Az interfész nem tartalmazhat adatmezőket, míg az absztrakt osztályban lehetnek adatmezők.
- Az interfészek segítenek meghatározni egy osztály perifériás képességeit, míg az absztrakt osztály az osztály identitását határozza meg.
Mi az absztrakt osztály?
Azt az osztályt, amelynek deklarációjában szerepel az absztrakt kulcsszó, absztrakt osztálynak nevezzük. Az absztrakt osztályoknak nulla vagy több absztrakt metódussal kell rendelkezniük. azaz test nélküli módszerek. Több konkrét módszer is lehet. Az absztrakt osztályok lehetővé teszik, hogy tervrajzokat készítsenek konkrét osztályokhoz. De az örökös osztálynak végre kell hajtania az absztrakt módszert. Az absztrakt osztályok nem példányosíthatók.
Az interfészek használatának fontos okai
- Az eléréshez interfészeket használnak absztrakció.
- Úgy tervezték, hogy futásidőben támogassa a dinamikus módszerfelbontást
- Segít elérni a laza kötést.
- Lehetővé teszi a metódus definíciójának elkülönítését az öröklési hierarchiától
Az absztrakt osztály használatának fontos okai
- Az absztrakt osztályok alapértelmezett funkcionalitást kínálnak az alosztályokhoz.
- Sablont biztosít a jövőbeli konkrét osztályokhoz
- Segít meghatározni egy közös interfészt az alosztályaihoz
- Az absztrakt osztály lehetővé teszi a kód újrafelhasználását.
Mi az interfész?
Az interfész egy tervrajz, amely egy osztály megvalósítására használható. A felület nem tartalmaz konkrét metódusokat (kóddal rendelkező metódusokat). Az interfész összes metódusa absztrakt módszer. Egy interfész nem példányosítható. Az interfészeket megvalósító osztályok azonban példányosíthatók. Az interfészek soha nem tartalmaznak példányváltozókat, de tartalmazhatnak nyilvános statikus végső változókat (azaz állandó osztályváltozókat)
Különbség az interfész és az absztrakt osztály között Java
Egy absztrakt osztály lehetővé teszi olyan funkciók létrehozását, amelyeket az alosztályok megvalósíthatnak vagy felülírhatnak, míg az interfész csak a funkcionalitás meghatározását teszi lehetővé, megvalósítását azonban nem. Egy osztály csak egy absztrakt osztályt terjeszthet ki, míg egy osztály több interfészt is megvalósíthat.
paraméterek | Felület | Absztrakt osztály |
---|---|---|
Sebesség | Lassíts | Gyors |
Többszörös öröklődés | Több interfészt valósítson meg | Csak egy absztrakt osztály |
Szerkezet | Absztrakt módszerek | Absztrakt és konkrét módszerek |
Mikor kell használni | Jövőbeli fejlesztés | A függetlenség elkerülése érdekében |
Öröklés/végrehajtás | Egy osztály több interfészt is megvalósíthat | Az osztály csak egy absztrakt osztályt örökölhet |
Alapértelmezett megvalósítás | Miközben új dolgokat adunk hozzá a felülethez, rémálom megtalálni az összes implementert és megvalósítani az újonnan definiált dolgokat. | Abstract Class esetén kihasználhatja az alapértelmezett megvalósítást. |
Hozzáférés módosítók | A felület nem rendelkezik hozzáférésmódosítókkal. Az interfészen belül minden meghatározott nyilvános módosítónak minősül. | Az Abstract Class rendelkezhet hozzáférésmódosítóval. |
Mikor kell használni | Jobb az interfészt használni, ha a különböző megvalósítások csak metódus aláírást osztanak meg. Értéktípusok polimorf hierarchiája. | Akkor kell használni, ha az azonos típusú különféle megvalósítások közös viselkedést mutatnak. |
Adatmezők | a felület nem tartalmazhat adatmezőket. | az osztálynak lehetnek adatmezői. |
Többszörös öröklés alapértelmezés | Egy osztály számos interfészt valósíthat meg. | Egy osztály csak egy absztrakt osztályt örököl. |
Implementáció | Az interfész absztrakt, így nem tud semmilyen kódot megadni. | Egy absztrakt osztály teljes, alapértelmezett kódot adhat, amelyet felül kell bírálni. |
Hozzáférés-módosítók használata | Nem használhat hozzáférésmódosítókat a metódusokhoz, tulajdonságokhoz stb. | Használhat egy absztrakt osztályt, amely hozzáférésmódosítókat tartalmaz. |
Használat | Az interfészek segítenek meghatározni egy osztály perifériás képességeit. | Az absztrakt osztály határozza meg az osztály identitását. |
Meghatározott mezők | Nem definiálható mező | Az absztrakt osztály lehetővé teszi mezők és konstansok meghatározását |
Öröklés | Egy interfész több interfészt is örökölhet, de osztályt nem. | Egy absztrakt osztály örökölhet egy osztályt és több interfészt. |
Konstruktor vagy rombolók | Egy interfész nem deklarálhat konstruktorokat vagy destruktorokat. | Egy absztrakt osztály deklarálhat konstruktorokat és destruktorokat. |
Kiterjesztések korlátja | Tetszőleges számú interfészt tud bővíteni. | Egyszerre csak egy osztályt vagy egy absztrakt osztályt tud kiterjeszteni. |
Absztrakt kulcsszó | Egy absztrakt felület kulcsszóban opcionális a metódus absztraktként való deklarálásához. | Egy absztrakt osztályban az absztrakt kulcsszó kötelező a metódus absztraktként való deklarálásához. |
Osztály típusa | Egy interfésznek csak publikus absztrakt metódusai lehetnek. | Egy absztrakt osztály védett és nyilvános absztrakt metódusokkal rendelkezik. |
Mintakód az interfészhez és az absztrakt osztályhoz Java
A következő példakód egy interfész és absztrakt osztály létrehozásához Java
Interfész szintaxis
interface name{ //methods }
Java Interfész példa:
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(); } }
Absztrakt osztály szintaxis
abstract class name{ // code }
Példa absztrakt osztályra:
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)); } }