Like this article? We recommend
Summary
You can change the following things freely:
Method bodies
transient
native
synchronized
throws clauses (exceptions)
abstract to not-abstract
static initializers (code that appears in braces outside of any method body labeled static)
Lowering privacy (private to protected, protected to public, etc.)
Adding interfaces
You can add members (fields and methods)
You can change the following things as long as no code was counting on it to be that way:
final
static
not-abstract to abstract
Raising privacy
Removing interfaces