It's the same as the following: Your source discards the fact that the object is actually a trialVinod object. The only way to be able to use the object as a trialVinod object again is by casting.
With Class.forName("trialVinod").newInstance(), the compiler does not even know the class, nor can it. It cannot convert the String into a Class object (the JVM can, but the compiler can't). Therefore, it doesn't know that the Class is a Class<trialVinod>.
This is often the case with Class.forName(). In fact, the class whose name is given to Class.forName does not even have to be available at compile time. This is a technique often used with plugins. Interfaces or base classes can solve these "method not found" problems mostly.
The following little example will create a user-provided set instance and print it:
Your source discards the fact that the object is actually a trialVinod object. The only way to be able to use the object as a trialVinod object again is by casting.
What Rob said is 100% correct -- you should know something about the object that is being instantiated (maybe an interface that it supports). And obviously, you can't cast it, because at compile time, you don't know anything about it.
However, what if you use the newInstance() method because you don't know about the class at compile time? And it doesn't support an interface that is usable?
So... if you don't know about the class at compile time, then yes, you need to use the newInstance() method to get an instance at runtime. And to call methods on it at runtime, you need to use the getMethod() (or getMethods() for all of them) to get the method that you want, and then use the invoke() method using the correct Method object.