
―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ジャパン)
- 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成 - Android 2.1の新機能で作る、美しく燃える“待ち受け” (2010/2/24)
新しく追加された、動く壁紙「Live Wallpaper」機能のサンプル動画を表示し、構成、設定ファイル、実装の仕方を解説します - AWS ToolkitでTomcatクラスタをEC2上に楽々構築 (2010/2/17)
Eclipseで開発したWebアプリを、Google App Engine並みに簡単に、Amazon EC2上にデプロイできる無料プラグインを紹介します
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 New! |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |

| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |

| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |
| ◆ | 直属上司が海外にいるのエンジニアに見る 【実例】場所に捉われないワークスタイル |

| ◆ | 「仮想化工房」のマイスターが選んだのは VMware、Hyper-V、そしてVirtageだった! |
| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |








