You're creating a SuperClass object with new SuperClass(). There is no way that can ever be cast to a SubClass reference because it just isn't a SubClass. A cast is telling the compiler "I know you think the type is this, but trust me, it's actually this type". But that still has to be true, or you get the exception.
If what you actually want to do is create an object of type T, then you'd have to use reflection. There'd be no point in doing that with the current example, but you might have to eventually.