Javaオブジェクト指向プログラミング講座

継承とコンストラクタ

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
継承にまつわるコンストラクタ使用方法の注意点を解説します。
講師:
06:56

字幕

このレッスンでは継承にまつわるコンストラクタの使用方法の注意点を解説します。今からプログラムで説明しますがどういうプログラムかというとコンストラクタ呼び出しを確認する。どうやって確認するかと言いますとこういったモデルです。スーパークラスが Aサブクラスが B です。コンストラクタが呼ばれた時に呼ばれたということが分かるようにA のコンストラクタには「A( ) が呼ばれたよ」、B のコンストラクタには「B( ) が呼ばれたよ」とこういうメッセージを入れます。そうすると、例えばコンストラクタが呼ばれると「A( ) が呼ばれた」「B( ) が呼ばれた」という風にメッセージが出るわけです。プログラムにこういうのを入れてコンストラクタが呼ばれたかどうかを確認します。それか、もう1つ継承に関してこの super( ) の使い方です。コンストラクタというのは継承されません。サブクラスから親クラスのコンストラクタをsuper( ) で呼び出すことができるんです。super( ) と書いたらデフォルトコンストラクタが呼ばれます。引数の無いコンストラクタです。コンストラクタがオーバーロードされている時はsuper( ) の引数の中に1個とか、2個とか、あるいは、その型でコンストラクタを選ぶことができます。 これを 今からサンプルプログラムで示します。NetBeans で、新規プロジェクトinheritance2 とします。場所は ch08Main とします。class A を作ります。protected int_a からデフォルトコンストラクタが呼ばれたらメッセージを表示するようにしておきます。サブクラスB はB extends A としておきます。ここも呼ばれたらそれを表示するようにしておきます。print( ) はa の値と b の値を表示します。この状態で Main にb という変数です。ここに new B ( ) だけをしています。実行をかけます。そうすると、「A( ) が呼ばれた。」「B( ) が呼ばれた。」と出ました。どういうことかというとこの b=newB( ) でB のコンストラクタを呼んでいるわけですけれどもB のコンストラクタを呼ばれるとこれが呼ばれているんですけどもB が呼ばれたんですけどもここに「A( ) が呼ばれた。」と書いてあります。つまり、サブクラスのコンストラクタを呼ぶと無条件に、A のデフォルトコンストラクタを呼んでいます。自分では B しか呼んでいないのに内部的にはまず、スーパークラスの A が呼ばれてB が呼ばれています。 だから、この A のデフォルトコンストラクタが無かったらこれはエラーになるわけです。次に、A に引数付きコンストラクタを作ります。そして、これも「A(int) が呼ばれた。」と表示します。それからA に a0 を代入します。B にも引数付きコンストラクタを作ります。ここも、呼ばれたらそれが呼ばれたことを表示してB に b0 を代入します。Main はちょっと修正してみましょう。Main の方は、ここを引数付きコンストラクタを呼ぶようにします。これで実行をかけてみます。そうすると、やっぱり「A( ) が呼ばれた。」「B(int) が呼ばれた。」と出ます。まず、 「B(int) が呼ばれた。」はB(10) ですからこっちのコンストラクタが呼ばれたわけです。しかし、その前にA のデフォルトコンストラクタを呼んでいるんです。サブクラスは必ずA のコンストラクタを呼ぶということです。次にコンストラクタ B(int, int) を作ります。呼ばれたらそれを表示します。(int, int) で表示します。ここで a と b の値を入れます。この a というのは実は class A にあるわけです。class A のここがprotected になっています。 ここが protected ならばサブクラスからは使えるわけです。だから、ここに a の値を設定することができます。これで実行しましょう。Main の方に B(10, 20) としてprint( )print() はこれですね。a の値と b の値です。この a もスーパークラスにあるんですけどもサブクラスは使うことができます。これを実行するとまず、A のデフォルトコンストラクタが呼ばれているんです。これは必ず呼ばれるんです。それから、自分のコンストラクタが呼ばれてそれから、表示されたということです。これをプログラムしている時はこの B のコンストラクタしか呼んでいないつもりですけどもA のデフォルトが必ず呼ばれているんです。そして、次に、この A のこのコンストラクタを使ってみます。どうするかというとこれをコメントアウトします。そして super (a0) でスーパークラスのコンストラクタを呼べるんですけどもこれにエラーが立っています。何故かというとこれを一番上に書かないといけないんです。ここにエラーメッセージが出ています。「super の呼び出しはコンストラクタの先頭文である必要があります。」super(a0) を、この一番上に持ってきます。 そうすると、この super(a0) はB のコンストラクタを呼んだらsuper(a0) が呼ばれます。これです。これを実行にかけてみましょう。そうすると、今度はデフォルトコンストラクタではなくて「A(int) が呼ばれた。」それから B (int, int) が呼ばれている。順番としては、 Main でまず B のコンストラクタを呼んだつもりですけどもここで super(a0) が先に呼ばれているんです。そして、これが表示されています。「A(int) が呼ばれた。」それから、これが表示されています。ここに、という具合です。このレッスンでは継承にまつわるコンストラクタ使用方法の注意点を解説しました。

Javaオブジェクト指向プログラミング講座

このコースではオブジェクト指向プログラミングの3大特徴である「カプセル化」「継承」「多態性」を、UMLモデルとJavaプログラムを対比しながら解説します。「カプセル化」ではコンストラクタや可視性、「継承」ではUML汎化関係とJavaの関係、「多態性」では継承およびインタフェースによるプログラミング方法などを説明します。

3時間23分 (36 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 2,990
発売日:2016年09月27日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。