Nutzung einer implementierten Schnittstelle

songoku1

Neues Mitglied
Hallo,

in der Universität haben wir eine Aufgabe zur Schnittstelle(Interface) CharSequence die folgende Methode enthalten soll:

Java:
public static int zaehleZeichen(CharSequence sequence) { 
      int laenge = sequence.length();
      return laenge;
}

Das ganze funktioniert auch. Allerdings verstehe ich nicht ganz:

- Wie kann es überhaupt ein Objekt vom Typ CharSequence geben?
Soweit ich weiß kann von einer Schnittstelle selbst kein Objekt erzeugt werden da Schnittstellen abstrakt sind.

- Wieso kann ich die Methode length() von CharSequence aufrufen und verwenden?
Soweit ich weiß werden Methoden in Schnittstellen nicht definiert sondern erst in der Klasse die die Schnittstelle implementiert.

Vielen Dank für eure Antworten.

Grüße
 
Die Klasse String implementiert CharSequence und somit kannst du der Methode ein Objekt der Klasse String übergeben und kannst dann auf diesem Operationen durchführen. Du könntest natürlich auch eine eigene Klasse das Interface implementeiren lassen.

Übrigends sollst du wahrscheinlich eher jedes Zeichen zählen, als einfach nur length() aufzurufen...

Hier mal ein kleines Beispiel:

Java:
public class Test {
	public static void main(String[] args) {
		CharSequence seq = new String("Mein String");
		System.out.printf("Der String '%s' hat %d Zeichen\n", seq,
				zaehleZeichen(seq));
	}

	public static int zaehleZeichen(CharSequence sequence) {
		int laenge = sequence.length();
		return laenge;
	}
}
 
Zuletzt bearbeitet:
Ich hatte den Code aus der Aufgabe etwas vereinfacht. Es ging ums zählen der Vokale aber darum geht es ja nicht.

Hier mal die main methode:
Java:
public static void main(String[] args) {
		String a = "hallu";
		System.out.println(ka.zaehleZeichen(a));
}

So ganz verstehe ich aber noch nicht wie ein Objekt vom Typ einer Schnittstelle sein kann, wenn von dieser keine Objekte erzeugt werden können. Hat dies irgendwas mit down-/upcast zutun?
 
Ja es hat damit etwas zu tun.
Du könntest auch einen String zu einer CharSequence casten.
Jedes Objekt einer Klasse ist jederzeit auch eine Instanz der implementierten Schnittstellen und der erweiterten Klasse.
Dadurch ist es zum Beispiel auch möglich jedes Objekt zu
Code:
Object
zu casten.
 

Zurück
Oben