(同じ利用者による、間の16版が非表示)
1行目: 1行目:
([[java.lang パッケージ|java.lang]].)Object [https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html]
([[java.lang のクラスたち|java.lang]].)Object [https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html]


私は全てのオブジェクトのスーパークラスです。
私は全てのオブジェクトのスーパークラスです。
7行目: 7行目:
* toString - オブジェクトの文字列表現を取得する
* toString - オブジェクトの文字列表現を取得する
* clone - オブジェクトのクローンを作成する
* clone - オブジェクトのクローンを作成する
* [[equals]] - 引数に指定されたオブジェクトと同値かどうか判定する
* equals - 引数に指定されたオブジェクトが同じか真偽する
* [[wait]] - 実行中のスレッドを一時待機させる
* wait - 実行中のスレッドを一時待機させる


==例==
==例==
===equalsオーバーライドの定石===
public boolean equals(Object o) {
if (o == this) return true;
if (o == null) return false;
if(!(o instanceof Monster)) return false;
Monster mon = (Monster) o;
if (!this.fieldName.trim().equals(mon.fieldName.trim())) {
    return false;
}
return true;
}
===hashCodeオーバーライドの定石===
===hashCodeオーバーライドの定石===
  class Hero {
  class Hero {
17行目: 29行目:
   
   
     public int hashCode() {
     public int hashCode() {
         int result = 37;  
         int result = 37;   // 0以外ならなんでも良い
         result = result * 31 + name.hashCode();
         result = result * 31 + name.hashCode();   // 31:奇数かつ素数
         result = result * 31 + hp.hashCode();
         result = result * 31 + hp.hashCode();
         return result;
         return result;
25行目: 37行目:


===clone実装の例===
===clone実装の例===
Object自身はインタフェースCloneableを実装していないため、クラスで実装する必要があります。
クラスのクローン機能を利用するためには、Cloneableインターフェースを実装し、cloneメソッドを改めてオーバーライドする必要がある。ちなみに Cloneble はマーカーインターフェース。


  public class Hero implements Clonable {
  public class Hero implements Clonable {
33行目: 45行目:
   
   
     public Hero clone() {
     public Hero clone() {
         Hero result = new Hero();
         Hero clo = new Hero();
         result.name = this.name;
         clo.name = this.name;
         result.hp = this.hp;
         clo.hp = this.hp;
         result.sword = this.sword;    // shallow copy
         clo.sword = this.sword;    // shallow copy
         // result.sword = this.sword.clone();    // deep copy
         // clo.sword = this.sword.clone();    // deep copy
         return result;
         return clo;
     }   
     }   
}
===equalsオーバーライドの定石===
public boolean equals(Object o) {
if (o == this) return true;
if (o == null) return false;
if(!(o instanceof Account)) return false;
Account r = (Account) o;
if (!this.accountNo.trim().equals(r.accountNo.trim())) {
    return false;
}
return true;
  }
  }

2019年7月2日 (火) 09:45時点における最新版

(java.lang.)Object [1]

私は全てのオブジェクトのスーパークラスです。

メソッド

  • hashCode - オブジェクトのハッシュ・コード値を知らせる
  • toString - オブジェクトの文字列表現を取得する
  • clone - オブジェクトのクローンを作成する
  • equals - 引数に指定されたオブジェクトが同じか真偽する
  • wait - 実行中のスレッドを一時待機させる

equalsオーバーライドの定石

public boolean equals(Object o) {
if (o == this) return true;
if (o == null) return false;
if(!(o instanceof Monster)) return false;
Monster mon = (Monster) o;
if (!this.fieldName.trim().equals(mon.fieldName.trim())) {
   return false;
}
return true;
}

hashCodeオーバーライドの定石

class Hero {
    String name;
    int hp; 

    public int hashCode() {
        int result = 37;    // 0以外ならなんでも良い
        result = result * 31 + name.hashCode();    // 31:奇数かつ素数
        result = result * 31 + hp.hashCode();
        return result;
    }   
}

clone実装の例

クラスのクローン機能を利用するためには、Cloneableインターフェースを実装し、cloneメソッドを改めてオーバーライドする必要がある。ちなみに Cloneble はマーカーインターフェース。

public class Hero implements Clonable {
    String name;
    int hp; 
    Sword sword;

    public Hero clone() {
        Hero clo = new Hero();
        clo.name = this.name;
        clo.hp = this.hp;
        clo.sword = this.sword;    // shallow copy
        // clo.sword = this.sword.clone();    // deep copy
        return clo;
    }   
}