Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Sonstige Fragen (http://www.informatikerboard.de/board/board.php?boardid=25)
--- Unterschied Interfaces und abstrakte Klassen? (http://www.informatikerboard.de/board/thread.php?threadid=2106)


Geschrieben von Erstsemester am 24.01.2015 um 05:40:

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



Geschrieben von Erstsemester am 24.01.2015 um 05:58:

 

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?)



Geschrieben von eulerscheZahl am 24.01.2015 um 08:42:

 

Die Frage kommt mir irgendwie bekannt vor. Karlito hat sich auch schon beantwortet, was mir Schreibarbeit abnimmt smile



Geschrieben von Erstsemester am 24.01.2015 um 09:19:

 

Oh sorry, das war nicht meine Absict, die gleiche Frage zweimal zu stellen. Das hatte ich vollkommen vergessen :-)



Geschrieben von eulerscheZahl am 24.01.2015 um 09:22:

 

Darfst sie auch gerne ein 3. Mal stellen, wenn es dir immer noch unklar ist Augenzwinkern



Geschrieben von Erstsemester am 24.01.2015 um 09:30:

 

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



Geschrieben von eulerscheZahl am 24.01.2015 um 09:58:

 

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



Geschrieben von Erstsemester am 24.01.2015 um 10:05:

 

Sei bitte so nett und schreibe noch ein paar Zeilen dazu, ich blicke momentan überhaupt nichts.



Geschrieben von eulerscheZahl am 24.01.2015 um 10:11:

 

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.



Geschrieben von Erstsemester am 24.01.2015 um 10:26:

 

Vielen Dank auch für diese Antworten.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH