【これから学ぶこと】
・インスタンスを正しく扱うための基本を学ぶこと
Javaでは自分たちで多くのクラスを作っていきます。
その全てのクラスにおいて、共通して利用できる仕組みがあります。
それが"インスタンスの5大基本操作"です。
今回は開発する中で、インスタンスを正しく扱うための基本を学ぶのがゴールです。
【そもそも何をもって、インスタンスの5大基本操作としているのか】
「Objectクラスに備わる基本機能」のことです。
Objectクラスとは、正確にはjava.lang.Objectクラスになります。
「java.lang.Object」は、全てのクラスの親になる重要なクラスです(先祖みたいなもん)
Javaのクラスを定義する時、extendsで親クラスを指定しなければ、自動的にjava.lang.Objectのサブクラス(子クラス)になります。
このことを暗黙の継承と呼ぶ人もいます。
extendsで親クラスを指定しなくても必ずObjectを継承するということは、すべてのJavaクラスの継承関係を親へ辿っていくと、最終的にはjava.lang.Objectに到着するということになります。
【なぜObjectクラスが存在するのか、そのメリットとは】
①全クラスはObjectクラスで定義されたメソッドを持つことが保証される
②,Object型変数には、あらゆるインスタンスを代入可能である
①が、今回学ぶ範囲に該当します。
Java言語の開発者は「すべてのクラスが持っておくべき機能」いわば、最低限備えて置いてほしいな~というをメソッドにしてObjectクラスに備えるようにしたらしいです。
これは、インスタンス同士の内容が同じかチェックしたり、インスタンスの内容がどのようなものかを文字情報として表示したりしたいことが頻繁にあるためです。
Objectクラスにそれらが定められているおかげで、クラスの種類を気にすることなく、常に同じ方法で内容を比較したり表示したりできます。
ちなみに、②についてのメリットですが「多態性を利用できるから」です。
全てのクラスの祖先がObjectクラスということは、Object型の変数にはどんなインスタンスでも代入できるということになります。
引数としてObject型を用いることで、何型でもいいからインスタンスを渡せるメソッドを作ることも出来ます。
public class Sample1 {
public void printAnything(Object o) {
// どんな型でも引数を一つ受け取り画面に表示
System.out.println(o.toString());
}
}
【インスタンスの5大基本操作とは】
具体的には以下の1~5になります。これから一つずつ記事にしていきます。
(メソッド / 操作の内容 / 関連するクラス)
1,インスタンスの文字列判定
(toString() / 文字列表現を得る / Object)
2,インスタンスの等価判定
(equals() / 等価判定を行う / Object)
3,インスタンスの要約
(hashCode() / ハッシュ値を得る / Object)
4,インスタンスの順序付け
(compareTo() / 大小関係を判定する / Comparable)
5,インスタンスの複製
(clone() / 複製する / Object,Cloneable)
公式ドキュメント:
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html