It seems that an abstract class means the definition of the class is not complete and hence cannot be instantiated.
And I saw some simple Java code which has an abstract
You might have some classes that don't make sense in the context of your application but they do in the design. A silly example: Abstract class animal, implement born and die. You don't want an "animal". You want a Dog. This way you don't have to repeat the code each class you add. Now you can have Dog, Cat or whatever you want, this would be a good reason, anyway it's hard to find.