1 abstract can only appear on three things: a class, a method, or a named member inner class.
2 You cannot put abstract on a variable, a constructor, or an interface definition.
3 abstract can appear on methods inside an interface. But it is not required there. Unlike the methods in an abstract class, some or all of which can be real, an interface's methods must always all be empty and abstract-like whether or not the keyword abstract actually appears on them..
4 A class must be declared abstract if any of the following three circumstances are true:
(a) It contains one or more abstract methods, or
(b) It inherits abstract methods which as yet have no implementations, or
(c) It implements an interface but does not implement every method in it.