| 継承 |
|
■概要
・継承は一つのクラスからしか出来ません。
⇒C++では、複数の親クラスを継承することができます。
・階層に制限はありません。
・コンストラクタは継承されません。明示的にsuper()を呼び出す必要があります。
※super()は一つ上の階層クラスの呼び出しです。複数階層になっている場合は、
それぞれのクラスでsuper()を呼び出す必要があります。
・super()定義がされていない場合でも、コンパイラが自動的にデフォルトコンストラクタを呼び出します。
※スーパークラス(親クラス)にデフォルトコンストラクタが定義されていない場合、
コンパイルエラーになります。
【補足】
・super() : スーパークラス(親クラス)のコンストラクタの呼び出しを行う
■基本構成
・継承する場合、"extends"定義よりスーパークラス(親クラス)を定義します。
【基本構成】
// ファイル名:TEST.java
// 基本構成
class Test{
public static void main(String args[]){
B_class b_ob = new B_class;
}
}
class A_class{
A_class(){
System.out.println("A_classのコンストラクタ");
}
}
class B_class extends A_class{
B_class(){
//J super()定義がない場合でも、
//J 引数無しのデフォルトコンストラクタが呼ばれる
//super();
System.out.println("B_classのコンストラクタ");
}
}
|
【実行結果】
A_classのコンストラクタ
B_classのコンストラクタ
※super()がコメント化されていても、A_classのコンストラクタ(引数無し)が呼ばれています。
これは、コンパイラが暗示的にsuper()呼出しをおこなっている為です。
■暗示的なsuper()
・上記のとおり、super()定義がされていなくても、引数無しのコンストラクタが暗示的に呼び出されます。
但し、スーパークラスに引数無しのコンストラクタが定義されていない場合、エラーが発生します。
【コンパイルエラー】
// ファイル名:TEST.java
// 基本構成
class Test{
public static void main(String args[]){
B_class b_ob = new B_class;
}
}
class A_class{
A_class(String str){
System.out.println(str);
}
}
class B_class extends A_class{
B_class(){
//J super()定義がない場合でも、
//J 引数無しのデフォルトコンストラクタが呼ばれる
//super();
System.out.println("B_classのコンストラクタ");
}
}
|
【コンパイル結果】
エラー発生:シンボルを解釈処理できません。
【解説】
super()がコメント化されている為、A_classのコンストラクタ(引数無し)を呼びにいこうとしますが、
A_classに引数無しコンストラクタが定義されていない為、コンパイルエラーは発生します。
※解決方法→A_classに引数無しのコンストラクタを定義すればエラーがなくなります。
|
|
| |

A8ネット
・人気度:★★★★★
・言わずと知れた人気ASP
 |
| |
楽天市場

・人気度:★★★★★
・誰でも安心、楽天市場で
タワーレコード
・人気度:★★★★☆
・CD/DVDならタワレコで
|
|