継承はコンストラクタと一緒に使うこともできる。
コンストラクタと継承については以下参照。
コンストラクタとともに使うことでどのような結果が得られるのかについて見ていく。
継承とコンストラクタを組み合わせたコード
継承とコンストラクタを組み合わせた簡単なコードを作ってみた。
class exampleIchi{
exampleIchi(){
System.out.println(“コンストラクタのメソッド”);
}
}
class exampleNi extends exampleIchi{
exampleNi(){
System.out.println(“2つ目のコンストラクタのメソッド”);
}
}
public class ConstructorKeisho {
public static void main(String[] args) {
exampleNi rei = new exampleNi();
}
}
作ったクラスの中にそれぞれコンストラクタを作ったもの。
コードの中身
緑色の部分は「exampleIchi」という名前のクラスがあり、そのクラスの中にコンストラクタが書かれている。
オレンジの部分は「exampleNi」という名前のクラスがあり、extendsによって「exampleIchi」クラスを継承している。
従って、「exampleIchi」クラスはスーパークラス、「exampleNi」クラスはサブクラスということになる。
ピンクはメインメソッドがある「ConstructorKeisho」という名前のメインクラス。
メインメソッドの中で「exampleNi」クラスのオブジェクトを作成している。
オブジェクトの作成方法については以下参照。
自作したクラスに状態を表すデータを作る-オブジェクトの作成方法 by Javaプログラミング初心者 Vol.37
上のコードを実行すると以下の結果が出た。
コンストラクタのメソッド
2つ目のコンストラクタのメソッド
メインメソッドでは1つのオブジェクトしか作ってないのに結果が2つ表示されてる。
これは「継承」によって、スーパークラスの「exampleIchi」がサブクラスの「exampleNi」に引き継がれたことによって、コンストラクタも一緒に引き継がれたから。
コンストラクタが引き継がれた場合、サブクラス(今回は「exampleNi」)のオブジェクトが作られるとスーパークラス(今回は「exampleIchi」)の内容も一緒に表示される。
コンストラクタはクラス名と同じ名前を持つからかな?
コンストラクタを含まないクラスを継承した場合
スーパークラスがコンストラクタを含まない場合も見てみた。
class exampleIchi{
void A(){
System.out.println(“コンストラクタのメソッド”);
}
}
class exampleNi extends exampleIchi{
exampleNi(){
System.out.println(“2つ目のコンストラクタのメソッド”);
}
}
public class ConstructorKeisho {
public static void main(String[] args) {
exampleNi rei = new exampleNi();
}
}
先に扱ったコードと違う部分は、水色の部分。
クラスの名前とは異なるAというメソッド名にした。
コンストラクタではないよ。
コンストラクタの大前提はクラス名と同じ名前だから。
実際に実行すると以下が表示された。
2つ目のコンストラクタのメソッド
今回は1つだけしか画面に表示されなかった。
もしexampleIchiクラスの中にあるメソッドAの「コンストラクタのメソッド」という内容を表示させたかったら以下のように書く。
rei.A();
メインメソッドの中に書くと「コンストラクタのメソッド」が表示される。
最後に
コンストラクタと継承を一緒に使うと、スーパークラスのメソッドも一緒に実行されるから、使い方に注意しないといけない。
ただ、両方表示させたかったら、少ないコードで済むから便利そう。
コメント