InstantiationException при простом рефлексивном вызове newInstance в классе?

У меня есть абстрактный класс A, т.е.

public abstract class A {

    private final Object o;

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

    public int a() {
        return 0;
    }

    public abstract int b();

}

У меня есть подкласс B, т.е.

public class B extends A {

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

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

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

}

Я выполняю следующий фрагмент кода:

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

и получаю InstantiationException при вызове newInstance , более конкретно:

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

Я не знаю, почему я получаю исключение. Я рассмотрел некоторые другие похожие вопросы и увидел кое-что об использовании конечных переменных при вызове суперконструктора или проблемах с абстрактной природой родительского класса, но я не смог найти окончательного ответа на то, почему эта конкретная ситуация вызывает исключение InstantiationException. Есть идеи?

11
задан mburke13 25 October 2011 в 23:06
поделиться