電子書籍の厳選無料作品が豊富!

java初心者です。
本日、参考書を読んでいるとき、次のような式および文がありました。なお、以下はスーパークラスにpersonクラスがあり、studentクラスとteacherクラスが継承しています。personクラスがworkメソッドを持ってます。

//通常の3倍働いてもらう
void work(Person p){
p.work();
p.work();
p.work();
}

「引数をperson型にしているので、このworkメソッドにはstudentクラスとteacherクラスのインスタンスも渡すことができます。」

私の中で、型はあくまで指示的なもの、および宣言に利用するものだと思ってました。基本型なら「この形のものを作るよ」とか、voidなら「戻り値はないんだよ」とか。

結局「型」とは何なんでしょうか?

初心者にもわかるよう、教えていただけないでしょうか?よろしくお願いします。

A 回答 (3件)

http://oshiete.goo.ne.jp/qa/7336441.html の私の回答ANo.3
http://oshiete.goo.ne.jp/qa/7175470.html の私の回答ANo.4, ANo.6

を,お読みいただき,それでも釈然としない点を指摘していただけるとありがたいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
あれから自分でも他の本や先輩にも、今回の回答と合わせ質問し理解することができました。
とはいってもまだまだ確信をもった理解というものでもないので、勉強を続けていきます。

お礼日時:2012/12/02 21:49

一言で言うと、「型」とは「インターフェース」の表現方法の一種です。


紛らわしいですが、Java言語のinterfaceのことを言っているわけではありません。
もっと一般的な意味の「インターフェース」です。

具体的には、Personという型は「人間を表現していて、workというメソッドがある」ことを示します。

Personを継承するということは、Personの性質「人間を表現していて、workというメソッドがある」を受け継ぐということです。
StudentやTeacherはPersonを継承しているので、やはり「人間を表現していて、workというメソッドがある」わけです。

そのため、Person型の入る場所、つまり「人間を表現していて、workというメソッドがある」ものが入る場所にはStudentやTeacherのインスタンスを入れることができます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
型という言葉に引っ張られすぎていたように思います。
仕組みはわかるのですが。
もっとシンプルに考えていこうと思います。

お礼日時:2012/12/02 21:51

イメージとしての話


メモリの中に 24 バイトの バイト配列が確保されていて
それが person クラス型 と呼ばれるものであるとします。

その person クラス型 の 24 バイトとまったく同じ並びの配列を持っていて、
その後ろに 8 バイトの配列が追加されたものが student クラス型
同様に person クラス型 の 24 バイトとまったく同じ並びの配列を持っていて、
その後ろに 16 バイトの配列が追加されたものが teacherクラス型
と呼ばれているとします。

関数の引数には、メモリのアドレス(メモリの先頭から何バイト目にその情報が
あるのか?)で渡すので、関数の引数は、 person クラス型であると指定すれば
person クラス型として受取る事が出来ます。
もちろん普通に student クラス型 として読むことも出来ます

24バイト目以降が違うので、student クラス型 として、指定されている関数の
引数に teacherクラス型をセットする事は出来ません

基本的なイメージとして、これが 継承 の仕組みです
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!