abstract class AbstractPlayer implements Player { private final String name; AbstractPlayer(String name) { this.name = name; } public final String getName() { return name; } public final String getShortName() { return String.valueOf(name.charAt(0)); } public final String toString() { return name; } public final int hashCode() { return name.hashCode(); } public final boolean equals(Object o) { if (!(o instanceof Player)) return false; Player that = (Player)o; return this.getName().equals(that.getName()); } }