クラスの継承
Object型
Object型は、すべてのクラスのスーパークラス
java.lang.Object
目次
1. Object型とは
extends Object
java.lang.Object というクラスが実在します。
Object型は、すべてのクラスのスーパークラスです。
すべてのクラスは、Objectクラスのサブクラスとも言えます。
クラスライブラリのクラスも、自分で作ったクラスも、Objectクラスのサブクラスです。
クラスの継承をする際に、「extends クラス名」と記述しますが、
クラスの定義で、extends を省略した場合は、extends Object が記載されているものとして解釈されます。
↓↓↓ 以下のように解釈されます。↓↓↓
ふ~ん。
重要
クラスの定義で、extends を省略した場合、
extends Object が記載されているものとして解釈されます。
Object型というのは
Javaに限らず
オブジェクト指向の
プログラム言語の多くで
用いられている。
2. toStringメソッド
Object型は、toStringメソッドや、equalsメソッド、hashCodeメソッド等を持っています。
今後、これらのメソッドは、クラスライブラリを学ぶ中で度々現れますが、
Object型から継承されたものです。
重要
toStringメソッドは Object型から継承されたものです。
はぁ。
ちょっとそのまま
読み進めて。
3. すべてのインスタンスは、Object型変数に代入できる
すべてのクラスは、Objectクラスのサブクラスなので、
すべてのクラスのインスタンスは、アップキャストで Object型変数に代入できます。
重要
すべてのクラスは Object型にアップキャストできます。
ほほぅ。
4. サンプル Object型にアップキャスト
何の継承関係もなさそうな Klass_A、Klass_B、Klass_C、ですが
いずれも Objectのサブクラスなので、Object型にアップキャストできます。
そして、toStringメソッドは、Objectクラスにあるのでアップキャストしたまま使えます。
すべてのクラスは
Object型にアップキャスト
できるぞ。
//Klass_A.java
public class Klass_A {
private String name;
public Klass_A(String name){
this.name = name;
}
@Override
public String toString(){
return name;
}
}
お上品に
toString に @Overrideを
記述しておこう。
Objectクラスのオーバーライドだからな。
//Klass_B.java
public class Klass_B {
private String name;
public Klass_B(String name){
this.name = name;
}
@Override
public String toString(){
return name;
}
}
//Klass_C.java
public class Klass_C {
private String name;
public Klass_C(String name){
this.name = name;
}
@Override
public String toString(){
return name;
}
}
ここでアップキャストね!
//Driver_ob.java
public class Driver_ob{
public static void main(String[] args){
Object[] obArray = new Object[3];
obArray[0] = new Klass_A("ヨーゼフ");
obArray[1] = new Klass_B("パトラッシュ");
obArray[2] = new Klass_C("白いお父さん");
for(int i=0; i<obArray.length; i++){
String str = obArray[i].toString();
System.out.println(str);
}
}
}
Klass_A.java
Klass_B.java
Klass_C.java
Driver_ob.java
を wsフォルダに保存して実行します。
コマンドライン
>cd ws
ws>javac -encoding UTF-8 Driver_ob.java
ws>java Driver_ob
ヨーゼフ
パトラッシュ
白いお父さん
このチュートリアルで紹介する予定はないけど、
戻り値が Object型のメソッドも存在する。
戻り値を目的のクラスにダウンキャストして使うんだ。
クラスの継承はこれで終わりです。
お疲れ様でした。
クラスの継承って
割と難関だから、
ちょっとづつ慣れれば
いいと思うぞ。
またねー。
お疲れ様でした。