みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

javaの「型」がよくわかりません。

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

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

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

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

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

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

投稿日時 - 2012-11-13 16:22:02

QNo.7795812

困ってます

質問者が選んだベストアンサー

http://okwave.jp/qa/q7336441.html の私の回答ANo.3
http://okwave.jp/qa/q7175470.html の私の回答ANo.4, ANo.6

を,お読みいただき,それでも釈然としない点を指摘していただけるとありがたいです。

投稿日時 - 2012-11-13 22:06:07

お礼

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

投稿日時 - 2012-12-02 21:49:07

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

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

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

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

投稿日時 - 2012-11-14 19:12:21

お礼

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

投稿日時 - 2012-12-02 21:51:59

ANo.2

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

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

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

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

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

投稿日時 - 2012-11-14 16:03:49

あなたにオススメの質問