0

次のデータ フィールドと関数を持つクラス Employee があるとします。プログラムは、 と を比較して 2 が等しいかどうかを確認しようとしますEmployeesnameaddress

public class Employee{
  private String name;
  private double hours;
  private double rate;
  private Address address;
    @Override
    public boolean equals(Object obj){
        if(obj == this) return true;
        if(obj == null) return false;
        if(this.getClass() == obj.getClass()){
            Employee other = (Employee) obj;
            return name.equals(other.name) && address.equals(other.address);
        }else{
            return false;
        }
    }

代わりにこれを行わなかったのはなぜpublic boolean equals(Employee obj)ですか (パラメーターが異なります)。

4

1 に答える 1

5

(1) そうすれば、new Empolyee().equals(null)こうなります。

(2)Objectクラスが宣言されているため、このメソッドをオーバーライドするためにパラメーターとしてequals(Object)配置することはできません。Employeeメソッドをオーバーライドするときにのみパラメーターを拡張できます。パラメーターを縮小することはできません。
次に、次のようにするとどうなりますか。

Object o = new Employee();
o.equals(new Object());

「メソッド」はこのケースを処理する方法を知りませんが、完全に有効であり、(一般的なケースでは) コンパイル時に知ることはできません。

これを回避するために、メソッドをオーバーライドするときにこのタイプの差異は許可されず、オーバーライドしようとするとコンパイル エラーが発生します。

于 2012-10-15T23:48:53.597 に答える