Unterschied Interfaces und abstrakte Klassen? |
Erstsemester unregistriert
|
|
Unterschied Interfaces und abstrakte Klassen? |
|
Meine Frage:
Hey :-)
Ja, die Frage ist:
Was ist der Unterschied zwischen Interfaces und abstrakten Klassen?
Meine Ideen:
Von abstrakten Klassen kann ja kein Objekt erzeugt werden. Interface heißt Schnittstelle.
Vielen Dank ;-)
|
|
24.01.2015 05:40 |
|
|
Erstsemester unregistriert
|
|
Auch steige ich nicht ganz durch, wie eigentlich Interfaces funktionieren. Habe herausgefunden, dass in Interfaces abstract vor Methoden nicht explizit angegeben werden muss.
Interfaces könnten doch zum Beispiel benutzt werden, wenn ich eine Superklasse Ton habe. Als Subklasse könnte Mensch, Tier sein.
Mensch würde noch von der Klasse Ton erben, Tier allerdings nicht mehr ( Hier wären dann Interfaces notwendig?)
|
|
24.01.2015 05:58 |
|
|
Erstsemester unregistriert
|
|
Oh sorry, das war nicht meine Absict, die gleiche Frage zweimal zu stellen. Das hatte ich vollkommen vergessen :-)
|
|
24.01.2015 09:19 |
|
|
Erstsemester unregistriert
|
|
Ok, ich blicke die Interfaces trotzdem nicht.
Die folgende Aufgabe:
Sortieren Sie eine Schublade mit ca. 10 Socken der Größe nach. Socken sollen eine Farbe (String)
und eine Größe (int) besitzen. Außerdem haben Socken das Interface Sortierbar implementiert, das
folgendermaßen aussieht:
interface Sortierbar
{
public int istGroesser(Sortierbar element);
}
Die Methode ist Groesser() gibt eine negative Integer-Zahl, null oder eine positive Integer-Zahl zurück,
je nachdem, ob das aktuelle Objekt kleiner, gleich oder größer als das angegebene Objekt ist.
Als Sortieralgorithmus verwenden Sie Bubblesort. Schreiben Sie hierzu Ihr Programm aus einer früheren
Übungsaufgabe allgemein für Objekte vom Typ "Sortierbar" um.
Der Sortieralgorithmus:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
|
import java.util.Arrays;
Ich weiß nicht einmal, was jetzt hier in ein Interface soll und was sonst gemacht werden soll, sprich mir fehlt der Ansatz :(
public class BubbleSort
{
public static void main(String[] args)
{
int[] werte = { 5,124,6,6,76,8 };
for (int i = 0; i < werte.length; i++)
{
for (int j = 0; j < werte.length - 1; j++)
{
if (werte[j] > werte[j + 1])
{
int speicher;
speicher = werte[j];
werte[j] = werte[j + 1];
werte[j + 1] = speicher;
}
}
}
System.out.println(Arrays.toString(werte));
}
} |
|
|
|
24.01.2015 09:30 |
|
|
|
Schau mal, ob du es so verstehst, wenn nicht, schreibe ich noch ein paar Zeilen dazu. Habe auch Polymorphie eingebaut.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
|
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Sortierbar[] objekte = { new Socke(42, "rot"),
new Schuh(39, "Turnschuh"), new Socke(45, "verwaschen") };
for (int i = 0; i < objekte.length; i++) {
for (int j = 0; j < objekte.length - 1; j++) {
if (objekte[j].istGroesser(objekte[j + 1]) > 0) {
Sortierbar speicher = objekte[j];
objekte[j] = objekte[j + 1];
objekte[j + 1] = speicher;
}
}
}
System.out.println(Arrays.toString(objekte));
}
}
public interface Sortierbar {
public int istGroesser(Sortierbar element);
abstract int liefereGroesse();
}
public class Socke implements Sortierbar {
private int groesse;
private String farbe;
public Socke(int groesse, String farbe) {
this.groesse = groesse;
this.farbe = farbe;
}
@Override
public int istGroesser(Sortierbar element) {
return this.groesse - element.liefereGroesse();
}
@Override
public int liefereGroesse() {
return groesse;
}
@Override
public String toString() {
return "Socke in " + farbe + " - Größe " + groesse;
}
}
public class Schuh implements Sortierbar {
private int groesse;
private String art;
public Schuh(int groesse, String art) {
this.groesse = groesse;
this.art = art;
}
@Override
public int istGroesser(Sortierbar element) {
return this.groesse - element.liefereGroesse();
}
@Override
public int liefereGroesse() {
return groesse;
}
@Override
public String toString() {
return art + " in Größe " + groesse;
}
} |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
24.01.2015 09:58 |
|
|
Erstsemester unregistriert
|
|
Sei bitte so nett und schreibe noch ein paar Zeilen dazu, ich blicke momentan überhaupt nichts.
|
|
24.01.2015 10:05 |
|
|
|
In der main wird eine Array erstellt, das sortiert werden soll:
Sortierbar[] objekte = { new Socke(42, "rot"), ...};
Wie du siehst, ist der Typ nicht Socke, sondern Sortierbar. Hier können nämlich auch andere Dinge stehen, die man sortieren kann: Socken und Schuhe haben beide eine Größe, deshalb können sie nach dem selben Kriterium sortiert werden.
Das Interface bietet eine Vergleichsfunktion und eine Möglichkeit, den Vergleichswert abzufragen (Sonst ist nicht gewährleistet, dass du Socken nur mit Socken vergleichst - und die Größe des Schuhs ist private, da kommt die Socke sonst nicht ran.
Die Socke implementiert die Vergleichsfunktion und sowie die Größenabfrage. Zwecks schönerer Ausgabe habe ich toString auch gleich noch überschrieben.
__________________ Syntax Highlighting fürs Board (Link)
|
|
24.01.2015 10:11 |
|
|
Erstsemester unregistriert
|
|
Vielen Dank auch für diese Antworten.
|
|
24.01.2015 10:26 |
|
|
|