InstantiationException auf einfache reflektierende Aufruf von newInstance der Klasse?

Ich habe eine abstrakte Klasse A, d.h.

public abstract class A {

    private final Object o;

    public A(Object o) {
        this.o = o;
    }

    public int a() {
        return 0;
    }

    public abstract int b();

}

Habe ich eine Unterklasse von B, d.h.

public class B extends A {

    public B(Object o) {
        super(o);
    }

    @Override
    public int a() {
        return 1;
    }

    @Override
    public int b() {
        return 2;
    }

}

Ich bin mit dem ausführen des folgenden Stück code:

Constructor c = B.class.getDeclaredConstructor(Object.class);
B b = (B) c.newInstance(new Object());

und immer eine InstantiationException auf den Aufruf von newInstance, genauer gesagt:

java.lang.InstantiationException
    at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

Ich weiß nicht, warum ich erhalte die Ausnahme. Ich habe mir einige andere ähnliche Fragen und Dinge gesehen, über die Verwendung von final-Variablen beim Aufruf des super-Konstruktors oder Probleme mit dem abstrakten Charakter der übergeordneten Klasse, aber ich konnte nicht finden eine definitive Antwort, warum diese Besondere situation wirft eine InstantiationException ein. Irgendwelche Ideen?

Meinst du weglassen extends A?
Woops ja sorry, bearbeitet.
Der code, den Sie eingefügt, funktioniert bei mir: ideone.com/0gCkp
Hmmm, Strippen es bis auf den blanken Knochen zu haben scheint, bekommen die Beseitigung der Fehler.

InformationsquelleAutor mburke13 | 2011-10-25

Schreibe einen Kommentar