Kezdőoldal » Számítástechnika » Programozás » Absztrakt osztály kontra...

Absztrakt osztály kontra interfész?

Figyelt kérdés
Mik a hasonlóságok és a különbségek?

2014. jún. 1. 17:22
 1/9 anonim ***** válasza:
Google-t nem ismered?
2014. jún. 1. 17:28
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:

Tessék, ne koptasd a billentyűzeted tovább:

[link]

2014. jún. 1. 17:59
Hasznos számodra ez a válasz?
 3/9 anonim ***** válasza:
47%
Az a külömbség köztük,hogy interfrész csak fügvény deklarációkat tartalmazhat.Az absztrakt pedig definíciót is.Interfrészt bármennyit örökölhet egy osztály míg egy osztálynak csak egy ősosztálya lehet.
2014. jún. 1. 19:45
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
29%

"Interfrészt bármennyit örökölhet egy osztály míg egy osztálynak csak egy ősosztálya lehet."


Tényleg?

2014. jún. 1. 20:33
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:
4%
Igen.
2014. jún. 1. 21:05
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:
69%

Nem feltétlenül igaz.


Vannak nyelvek ahol létezik többszörös öröklődés, van ahol nincs.



A helyes válasz az, ami korábban már elhangzott.

Az interfaceben deklarációk vannak, az absztrakt osztályban lehet definíció is.

2014. jún. 1. 21:19
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:
31%

Látom egyeseknek nem tiszta.


Az "abstract" osztály:

- csak is kizárólag ős osztály lehet

- nyelvtől függően lehet benne definiálni mindent, mint egy sima osztályban. De megendegedett az olyan metódus írása, ami nem definiált. Azaz pl. a method_2 és _3, amit a gyerek osztályban kötelezően definiálsz.


abstract class AbstactObject {

int x, y;

...

void method_1(int newX, int newY) {

...

}

abstract void method_2();

abstract void method_3();

}


------------


Az "interface" már másabb. Azt mondod meg vele, hogy milyen csatornákon kommunikálhat az osztály lényegében.


public interface iClass1 {

int method_1();

}

public interface iClass2 {

int method_2();

}

public class MyClass implement iClass1, iClass2 {

int method_1() { ... } //definiálom

int method_2() { ... } //definiálom

int method_3() { ... } //saját metódus

}


JAVA-ban ha így hozol létre egy Objektumot:

iClass1 Objektum = new MyClass();


Ekkor ez esetben csak is kizárólag a iClass1 által nyújtott interfészen éred el az oszályt, mert interfész alapján példányosítottad. De lehet interfészt örököltetni interfésszel is. És ha úgy példányosítod. akkor minden fasza. De ezt is megoldható interfésszel JAVA alatt:


public interface iClass1 {

int method_1();

}

public class Alma implement iClass1 {

int method_1() { ... } //definiálom

}

public class Korte implement iClass1 {

int method_1() { ... } //definiálom

}


Példa 1:

Alma A;

A = new Alma(); <-- ez egyértelmű

A = new Korte(); <-- ez hiba!!


Példa 2:

iClass1 A;

A = new Korte(); <-- ez már oké

A = new Alma(); <-- ez is, mert mind2 osztály tartalmazza ugyanazt az interfészt

2014. jún. 1. 22:20
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:

A kérdésből adódóan a kérdező valószínűleg a Java nyelvre gondol.


Ahogy leírták már előttem az a fő különbség, hogy az interfész csak metódus deklarációkat tartalmazhat. Az absztrakt osztály pedig akár definíciót is.


Elméletben ez az egyetlen kikötés. Nyelvspecifikusan persze lehet tovább definiálni a két fogalmat.


Java-ban egy osztálynak egy egyetlen ősosztálya lehet, de interfészt bármennyit többet is "örökölhet".


Igazából így próbálták kicsit egyszerűsíteni a polimorfizmust, hogy átláthatóbb legyen. Természetesen ez csak egy konvenció, logikailag megoldható a több ős is, példának okáért C++-ban létezik ilyen.


Bár C++-ban nincs nyelvi megkötés interfészre, nyilván egy, csak pure virtual metódusokat tartalmazó osztályt nevezhetünk interfésznek és általában érdemes jelölni is az ilyen osztály egy "I" prefixel.

Az egyetlen megkötés az, hogy amíg egy osztályban létezik definiálatlan (pure virtual) metódus, addig az osztály absztraktnak tekinthető. Ez egybe is vág ugye a fenti állítással.


Ha teljesség kedvévért ide tartozik, hogy C++-ban az öröklés minősíthető láthatóság szerint. Azaz létezik public, protected és private öröklés is.

2014. jún. 2. 11:34
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:
Köszönöm szépen a segítséget! :)
2014. jún. 3. 11:52

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!