In Java definieren Leute oft eine Schnittstelle zusammen mit einer Klasse und verwenden Schnittstellennamen anstelle von Klassennamen, um spätere Implementierungen zu ermöglichen. Hier wird die logische Schnittstelle dupliziert.Warum kann ich "implementiert AClass" in Java nicht schreiben?
Diese Art der "Nur-für-Fall" -Duplizierung wäre nicht notwendig, wenn Java die Verwendung einer Klasse als Schnittstelle zulässt, zB: class MyScanner extends MyStuff implements java.util.Scanner
. Auch würde dies die Situation erleichtern, in der ich einen Klassentyp bereitstellen muss, aber ich möchte diese Klasse nicht erweitern.
Wie ich verstehe, „eine Klasse Umsetzung“ würde abgelehnt werden, nicht nur durch den Compiler, sondern auch von der JVM (wenn ich diese Erklärung in Klassendatei gehackt). Gibt es dafür technische Schwierigkeiten oder wird das nicht als wichtig angesehen? Es sieht nicht wie ein Rückwärtskompatibilitäts-Problem aus (ich meine, alter Code lief gut, wenn JVM dies unterstützte).
EDIT: zur Klarstellung, werde ich hier kopieren StriplingWarrior ist viel besser Wortlaut der gleichen Fragen:
Warum kann eine Klasse "nicht implementieren" Methode einer anderen Klasse, ohne diese Klasse tatsächlich zu erweitern? Ist es ein technisches Problem? Würde es uns irgendwie für einige Probleme öffnen, die das OP nicht vorhersehen kann?
Es klingt nicht wie Sie eine Frage haben. Wenn Sie einen Vorschlag für eine Spracherweiterung haben, ist dies wirklich nicht der richtige Ort. –
gut, schauen Sie sorgfältig Konstantin, oder suchen Sie nach einem Fragezeichen :) – Aivar
@Konstantin Komissarchik: Ich stimme nicht zu. Ich denke, dies ist eine gut durchdachte Frage: Warum kann eine Klasse den Methodenvertrag einer anderen Klasse nicht "implementieren", ohne diese Klasse tatsächlich zu erweitern? Ist es ein technisches Problem? Würde es uns irgendwie für einige Probleme öffnen, die das OP nicht vorhersehen kann? Ich denke, es zählt als Programmierfrage. – StriplingWarrior