abstract java class rules