![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
java初心者です。
本日、参考書を読んでいるとき、次のような式および文がありました。なお、以下はスーパークラスにpersonクラスがあり、studentクラスとteacherクラスが継承しています。personクラスがworkメソッドを持ってます。
//通常の3倍働いてもらう
void work(Person p){
p.work();
p.work();
p.work();
}
「引数をperson型にしているので、このworkメソッドにはstudentクラスとteacherクラスのインスタンスも渡すことができます。」
私の中で、型はあくまで指示的なもの、および宣言に利用するものだと思ってました。基本型なら「この形のものを作るよ」とか、voidなら「戻り値はないんだよ」とか。
結局「型」とは何なんでしょうか?
初心者にもわかるよう、教えていただけないでしょうか?よろしくお願いします。
No.1ベストアンサー
- 回答日時:
http://oshiete.goo.ne.jp/qa/7175470.html の私の回答ANo.4, ANo.6
を,お読みいただき,それでも釈然としない点を指摘していただけるとありがたいです。
回答ありがとうございます。
あれから自分でも他の本や先輩にも、今回の回答と合わせ質問し理解することができました。
とはいってもまだまだ確信をもった理解というものでもないので、勉強を続けていきます。
No.3
- 回答日時:
一言で言うと、「型」とは「インターフェース」の表現方法の一種です。
紛らわしいですが、Java言語のinterfaceのことを言っているわけではありません。
もっと一般的な意味の「インターフェース」です。
具体的には、Personという型は「人間を表現していて、workというメソッドがある」ことを示します。
Personを継承するということは、Personの性質「人間を表現していて、workというメソッドがある」を受け継ぐということです。
StudentやTeacherはPersonを継承しているので、やはり「人間を表現していて、workというメソッドがある」わけです。
そのため、Person型の入る場所、つまり「人間を表現していて、workというメソッドがある」ものが入る場所にはStudentやTeacherのインスタンスを入れることができます。
回答ありがとうございます。
型という言葉に引っ張られすぎていたように思います。
仕組みはわかるのですが。
もっとシンプルに考えていこうと思います。
No.2
- 回答日時:
イメージとしての話
メモリの中に 24 バイトの バイト配列が確保されていて
それが person クラス型 と呼ばれるものであるとします。
その person クラス型 の 24 バイトとまったく同じ並びの配列を持っていて、
その後ろに 8 バイトの配列が追加されたものが student クラス型
同様に person クラス型 の 24 バイトとまったく同じ並びの配列を持っていて、
その後ろに 16 バイトの配列が追加されたものが teacherクラス型
と呼ばれているとします。
関数の引数には、メモリのアドレス(メモリの先頭から何バイト目にその情報が
あるのか?)で渡すので、関数の引数は、 person クラス型であると指定すれば
person クラス型として受取る事が出来ます。
もちろん普通に student クラス型 として読むことも出来ます
24バイト目以降が違うので、student クラス型 として、指定されている関数の
引数に teacherクラス型をセットする事は出来ません
基本的なイメージとして、これが 継承 の仕組みです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 15:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(vba)他のアプリケーションの右...
-
C# 「データが失なわれる可能性...
-
interface,extend,implementの...
-
オブジェクト指向 ボールの衝突
-
JAVAでCPUなどのシリアル番...
-
抽象クラスをJUNITでテストする...
-
【smarty】smartyの$this->って...
-
絶対パス ⇒ フォルダかファイル...
-
C++ヘッダの肥大化
-
抽象クラスのエラーが出ます
-
ContentLengthを確認したい
-
全パッケージの取得、全クラス...
-
サーバー上のフォルダ情報の取得
-
【C#】抽象クラスでコンパイル...
-
vb.net 自作プロパティの削除に...
-
抽象クラスからオーバーライド...
-
「ラッパークラス」の存在意義...
-
c++でのヘッダーファイルの循環...
-
委譲って何ですか?
-
C言語のプログラムをJavaに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
C# 「データが失なわれる可能性...
-
「ラッパークラス」の存在意義...
-
c++でのヘッダーファイルの循環...
-
(vba)他のアプリケーションの右...
-
「継承されたメソッドの可視性...
-
「IOException は対応する try ...
-
ゲッターを使わないで変数にア...
-
JavaでのAPIの覚え方ってみさな...
-
【C#】クラスのコンストラクタ...
-
Javaのインスタンス化の構文の...
-
Javaで下線
-
VB DLLプロジェクトについて
-
委譲って何ですか?
-
ASP.NETでの共通コードの書き方...
-
オーバーライドとラッパーの違い
-
抽象クラスをJUNITでテストする...
-
Commons-Discovery.jarとは?
-
JTextFieldの入力制限
-
setTextについて
おすすめ情報