http://blogs.wankuma.com/rti/archive/2007/08/14/90238.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門9
http://blogs.wankuma.com/rti/archive/2007/08/10/89801.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門8
http://blogs.wankuma.com/rti/archive/2007/08/08/89397.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7
http://blogs.wankuma.com/rti/archive/2007/08/07/89226.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門6
http://blogs.wankuma.com/rti/archive/2007/08/02/88399.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門5
http://blogs.wankuma.com/rti/archive/2007/07/31/87955.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門4
http://blogs.wankuma.com/rti/archive/2007/07/30/87742.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門3
http://blogs.wankuma.com/rti/archive/2007/07/26/87105.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門2
http://blogs.wankuma.com/rti/archive/2007/07/25/86988.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門1
の続きです。
どこからフォローすれば良いのかわからないので、先頭から順に行ってます。
今回は
System.Object
の継承は省略できます
というテーマです。
以前、全てのクラスは、Object クラスを継承していると言う説明をしました。
現実の世界でも、人物、動物、植物、製造物、危険物というように、世の中には物という基本の上にあります。
さて、毎度おなじみのR・田中一郎クラスはどうでしょうか?
以下の C# で書いたソースコードを見て下さい。
public class R・田中一郎 {
public string 会員番号 { get { return "34"; }}
public string 名前 { get { return "R・田中一郎"; }}
public string 年齢 { get { return "18"; }}
public string 職業 { get { return "IT関係"; }}
public string 印象 { get { return "素敵だし爽やか"; }}
public void 自己紹介(){
Console.Writeline(
"オブジェクト指向ファンの皆さん、こんにちは。" +
"わんくま会員番号" + this.会員番号 + "番の" + this.名前 + "です。" +
"年齢は、" + this.年齢 + "才。職業は、" + this.職業 "です。" +
"今日は、オブジェクト指向ファンの皆さんを前にして、" +
this.印象 + "な僕が、オブジェクト指向について語るということで、" +
"些かガクブルな状態ではありますが、早速はじめたいと思います。"
);
}
}
何も継承していません。
しかし、試しに以下のコードを実行してみると、きちんと実行されます。
R・田中一郎 r = new R・田中一郎();
Console.WriteLine(r.ToString());
ToString() メソッドなんて、R・田中一郎クラスのどこにも実装されていません。
何故でしょうか?
これは、ToString() メソッドが、System.Object クラスのメンバだからです。
つまりこれは、System.Objectクラスを継承している証拠になります。
では、何故明示的に何も継承していないR・田中一郎クラスが、System.Object クラスを継承しているのでしょうか?
答えは簡単で、System.Object クラスの継承は省略できるからなのです。
上記のクラスは、以下のように書いたことと同じ扱いになります。
public class R・田中一郎 : System.Object {
このことから「System.Object クラスを除く全てのクラスは、別のクラスを継承している」ということになります。
そして、その継承元となっているクラスを辿っていくと、必ず System.Object クラスを継承していることになります。