Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Typsicherheit?

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.07.2013
    Beiträge
    1

    Question Typsicherheit?

    Hallo zusammen,
    ich bin neu in Java und verstehe folgendes nicht:

    Ich implementiere ein Interface in einer Klasse. Damit ist ein Objekt meiner Klasse automatisch auch ein Objekt vom Typ des Interfaces.
    Meine Klasse hat eine Methode mehr als das Interface. Wenn ich ein Objekt meiner Klasse einer Variable vom Typ des Interfaces zuweise, muss ich einen Cast durchführen, um diese zusätzliche Methode zu verwenden. (Oder das Objekt direkt einer Variablen vom Typ der Klasse zuweisen.)

    Warum?

    Ich vermute, dass es um Typsicherheit geht. Verstehe aber nicht, warum es nicht ohne dies auch Typsicherheit gibt. getClass() liefert mir immer korrekt zurück, dass es sich um ein Objekt meiner Klasse handelt. Auch dann, wenn es sich um eine Variable vom Typ des Interfaces handelt. Wozu also ein Cast?

    Ist das Zuweisen eines Objekts zu einer Variablen vom Typ des Interfaces ein impliziter Cast?

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zur Laufzeit steht dem System natürlich die Typinformation zur Verfügung, sonst würde ja auch der Cast nicht funnktionieren, bzw. könnte keine Cast Exception werfen wenn der Cast ungültig ist.

    Zur Übsetzungszeit geht das nicht, bzw. nicht allgemein, weil der Compiler sonst für jede Variable des Interface-Typs alle möglichen Codepfade zurückverfolgen müsste um sicher zu gehen, dass der aktuelle Inhalt nur von einem bestimmten Typ sein kann.

    Nach einer Zuweisung auf eine Variable des Interface-Typs ist für den Compiler nur mehr dessen API "sichtbar" (upcast).

    Wenn man dann Zugriff auf implementierungspezifische API braucht, muss man dem Compiler diese Sichtbarkeit mitteilen (downcast). Der Compiler fügt dann auch Code ein, der dann zu Laufzeit prüft ob das eine korrekte Annahme war und, falls das nicht der Fall war, eine Exeception wirft.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •