


public abstract class AbstractCustomer implements Customer{
  final String name;
  String address;
  
  
  public AbstractCustomer(String name, String address) {
    this.name = name;
    this.address = address; 
  }
  public String getAddress() {
    return address;
  }
  
  public void setAddress(String address) {
    this.address = address;
  }
  public String getName() {
    return name;
  }

  // a Customer can be instance can be a key of a Map
  @Override
  public boolean equals(Object obj) {
    if (! (obj instanceof AbstractCustomer)) return false;
    return name.equals(((AbstractCustomer) obj).name) &&
           address.equals(((AbstractCustomer) obj).address);
  }

  @Override
  public int hashCode() {
    return new String(name+address).hashCode();
  }
 
}
