
―Javaプログラミングの前提知識―
2003/2/27
| ThisとSuperを使い分ける |
| ワンポイントQuestion |
次のプログラムを実行したときの結果として正しいものはどれですか? (単一選択)
1: class This_Super{ |
|
| 配列の宣言方法 |
キーワード「this」と「super」は、それぞれ自オブジェクトの参照、親オブジェクトの参照を意味するキーワードです。例えば、以下のようなコードがあります。
class MyClass { |
MySubClass内のfunc()メソッドでthisとsuperを使用しています。thisは自分自身のオブジェクト参照ですので、
this.x = 20; |
は、MySubClassのメンバ変数xに20を代入します。また、superはスーパークラスのオブジェクト参照ですので、
super.func(); |
は、MyClassのfunc()メソッド呼び出しになります。
参照データ型変数の使用方法と同様に、thisやsuperの後に「.(ドット)」をつけて、自オブジェクトや親オブジェクトの変数やメソッドを利用することができます(下図)。
![]() |
| thisとsuper |
また、thisやsuperを使ってコンストラクタを呼び出すこともできます。
| 例) thisを使ったコンストラクタ呼び出し |
class MyClass { |
この例のthis();は、引数なしのコンストラクタMyClass()を呼び出しています。
| 例) superを使ったコンストラクタ呼び出し |
class MyClass { |
この例のsuper();は、MySubClassのスーパークラスであるMyClassのコンストラクタMyClass()を呼び出しています。
thisやsuperをコンストラクタ呼び出しに使用することができますが、文法的な規則として、thisやsuperのコンストラクタ呼び出しは、そのコンストラクタの先頭に記述する必要があります。記述が先頭にない場合は、コンパイルエラーとなります。
本設問のソースファイルには3つのクラスが定義されています。1行目からの「This_Super」クラスはスーパークラス、9行目からの「Sub_This_Super」クラスは「This_Super」のサブクラス、19行目からの「Create」クラスはmainメソッドをもち、実行時に「Sub_This_Super」クラスのオブジェクトをつくります。「This_Super」クラスと「Sub_This_Super」クラスは継承関係にあります。
そして、それぞれのクラスにint型の変数iが別の初期値で宣言されています。superは継承関係にあるクラスのスーパークラスの要素をさします。よって「Sub_This_Super」クラスでsuperを指定した場合、「This_Super」クラスの要素をさします。また、thisは自クラスの要素をさしますので、「Sub_This_Super」クラスでthisを指定した場合、「Sub_This_Super」クラスの要素を指します。
プログラムの実行経過を以下で説明します。
|
(1)Createクラスを実行するとmainメソッドが呼び出され、処理を開始します。処理はまずSub_This_Superクラスのオブジェクトを作成してprintメソッドを呼び出します。 |
よって、プログラムの実行により表示されるのは「121」となります。
| POINT |
|
クラスのメンバ変数とそのクラスがもつメソッド内のローカル変数が同一変数名の場合(例えば本設問のSub_This_Superクラスの変数iです)、ローカル変数が優先されるので、メンバ変数側を操作したい場合は、明示的にthisを指定する必要があります。 |
| KEYWORD |
| ■スーパークラス クラス定義でキーワード「extends」の後に指定されたクラスです。 ■コンストラクタ クラスがインスタンス化されるときに呼び出される特殊なメソッドです。 |
| ワンポイントQuestionの解答 |
正解 C
| Java2ラーニングブック
−310-035 編− 本記事は@ITハイブックスシリーズ「Java2ラーニングブック −310-035 編−」(技術評論社)から、一部の内容を編集し転載したものです。本書の詳細は「@ITハイブックス」サイトでご覧いただけます。 |
![]() |
ホワイトペーパー(TechTargetジャパン)
- Webの表示速度を遅くする「SSLハンドシェイク」とは (2010/2/9)
安全性を担保しようとWebページにSSLを適用すると、負荷の高い処理が実行される。速度と安全性は両立できるのか? - クラウド活用「雲活」のために押さえるべき39のポイント (2010/2/2)
活用するべきサービスか否か、クラウドの利点・問題点、クラウドプラットフォーム提供企業になるための条件、開発者がするべきことに分けて紹介 - 再利用性の高いクラス作成に重要な“アクセス制御” (2010/1/28)
Javaのアクセス修飾子public、private、protectedや、Eclipseで簡単に作れるアクセサメソッドgetter、setterについて解説 - DB設計の神ツール「ERMaster」なら、ここまでできる (2010/1/21)
直感的なUIに、カスタマイズ可能な、Excel出力のテーブル定義書、辞書機能など多機能なERモデリングの無料Eclipseプラグインです
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |








