Java Core Java Serializable Difference between interfaces and abstract classes? hashCode() and equals()