
―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ジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


