Unterschied Interfaces und abstrakte Klassen?

Neue Frage »

Auf diesen Beitrag antworten »
Erstsemester 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 ;-)
 
Auf diesen Beitrag antworten »
Erstsemester

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?)
Auf diesen Beitrag antworten »
eulerscheZahl

Die Frage kommt mir irgendwie bekannt vor. Karlito hat sich auch schon beantwortet, was mir Schreibarbeit abnimmt smile
Auf diesen Beitrag antworten »
Erstsemester

Oh sorry, das war nicht meine Absict, die gleiche Frage zweimal zu stellen. Das hatte ich vollkommen vergessen :-)
 
Auf diesen Beitrag antworten »
eulerscheZahl

Darfst sie auch gerne ein 3. Mal stellen, wenn es dir immer noch unklar ist Augenzwinkern
Auf diesen Beitrag antworten »
Erstsemester

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));
	}
}
Auf diesen Beitrag antworten »
eulerscheZahl

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;
	}
}
Auf diesen Beitrag antworten »
Erstsemester

Sei bitte so nett und schreibe noch ein paar Zeilen dazu, ich blicke momentan überhaupt nichts.
Auf diesen Beitrag antworten »
eulerscheZahl

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.
Auf diesen Beitrag antworten »
Erstsemester

Vielen Dank auch für diese Antworten.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »