Ich versuche, abstrakte Klassen in Java zu verstehen, so schrieb ich diesen Code-Schnipsel in IntelliJ:Warum kann ich diese abstrakte Klasse instanziieren?
AutoCloseable ac = new BufferedInputStream(new InputStream() {
@Override
public int read() throws IOException {
return 0;
}
});
Der @Override
und read()
Stummel wurde automatisch von IntelliJ erstellt.
Da InputStream
eine abstrakte Klasse ist, warum kann ich sie mit dem Schlüsselwort new
instanziieren?
Und noch etwas. Wenn ich die Methode Stub wie folgt löschen:
AutoCloseable ac = new BufferedInputStream(new InputStream());
Die IDE sagt, dass InputStream
abstrakt ist und daher nicht instanziiert werden kann (wie erwartet).
Also, warum ist das erstere gültig und das letzte nicht?
Und woher kommt diese read()
Methode?