An abstract class is one which can be used to define some kind of a template (i.e a generic one)
For eg, we can hav an abstract class shape, which contains methods like
draw() etc which cannot be defined by tht class itself. But classes tht extend this abstract class like square, circle etc can implement this method in their own terms.
Thus an abstract class helps to define a common template which the non-abstract subclasses can use.
(The point is, by making an abstract class reference point to instances of its different non-abstract subclasses we can achieve Runtime
polymorphism)
Regarding a non-abstract subclass, it is the subclass of an abstract class, which implements all of the abstract methods of its parent class.
If a subclass of an abstract class decides not to implement all the abstract methods of its parent, then the subclass also shud be declared as abstract (the abv rule holds good for its subclass also).
Hope the abv answer is correct...and it helps