Putting abstract or final is not impotant, if you need them you can use one of them for a class. And, it behaves like the top level class in th context of extending, and overiding those classes and methods respectively.
The most basic characteristic of a non-static inner class is that, an instance of an inner class must be tied up with an instance of an outer class. Thus, we can think the regular inner class is an instance member of the outer class. Another basic characteristic of regular inner class is that, it cannot have any static context. Whether you will specify the regular inner class as abstract or final (but not both) is totally depended on your requirements. The following is a very basic example of regular inner class: