The meaning of the final, abstract and static Java modifiers can be confusing and hard to remember. Here's a brief summary:
Generally means "can't be changed".
- final class: can't be extended (sub-classed)
- final method: can't be overridden or hidden by sub-classes
- final variable: can only be initialized once
Generally means "can't be instantiated".
- abstract class: can't be instantiated, can be extended, must be declared abstract if it contains one or more abstract methods
- abstract method: has only a declaration with no body
- abstract variable: not allowed
Generally means "not associated with an instance".
- static class: only nested inner classes can be static, they are not associated with any instance of the enclosing class
- static method: doesn't use instance variables
- static variable: is the same across all instances of it's containing class
- constants: use static final as variable modifiers
- abstract static methods are not allowed