編集の要約なし |
|||
(同じ利用者による、間の28版が非表示) | |||
1行目: | 1行目: | ||
([[java.lang | ([[java.lang のクラスたち|java.lang]].)Object [https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html] | ||
私は全てのオブジェクトのスーパークラスです。 | 私は全てのオブジェクトのスーパークラスです。 | ||
==メソッド== | ==メソッド== | ||
* | * 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; | |||
} | |||
} |
2019年7月2日 (火) 09:45時点における最新版
私は全てのオブジェクトのスーパークラスです。
メソッド
- 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; } }