➀クラスを引き継ぐ
javaでは、既に作成済みのclassファイルや、javaの中にもともと入っている膨大な量のclassファイルに独自に作成したclassファイルを、付け足す事ができる。その事をクラスの拡張という。拡張する事のメリットは、重複しているメゾットや、フィールドを再度記述する必要がなくなる。拡張した(付け加えた)クラスをサブクラス、もともとあったクラス(付け加えられたクラス)をスーパークラスと呼ぶ。
② 拡張の方法
クラスの宣言の直後に、exteds文を記述し、スーパークラスを拡張する。サブクラス名の後ろに、『extends スーパークラス名』を記述する事により拡張できる。
class Car extends Thread
{
・・・
}
CarクラスをサブクラスにThreadクラスをスーパークラスにした記述。
class Taxi extends Car
{
・・・
}
Taxiクラスをサブクラスとし、Carクラスをスーパークラスにした記述。
③ 記述例
class Car
{
public int num;
public double gas;
Car(){
System.out.println("コンスト車を作成");
}
public void setNG(int n,double g){
num = n;
gas = g;
System.out.println("ガソリンの量を変更しました。");
}
}
class Taxi extends Car
{
private int park;
Taxi(int p){
park = p;
}
public void setP(int p){
park = p;
}
public void showNGP(){
System.out.println("ナンバーは"+num+"、ガソリンの量は"+gas+"、駐車場は"+park+"です。");
}
}
class Sample1
{
public static void main(String[] args)
{
Taxi taxi1 = new Taxi(5);
taxi1.setNG(4597,40.5);
taxi1.showNGP();
}
}
上記コードでは、Car classをスーパークラスとし、Taxi classをサブクラスとしている。main() classをSample1としている。
④ コンストラクタ
継承されるのは、フィールドのみで、コンストラクタは、継承されない。
継承する場合は、
⭕️順序
main()クラスにおいて、サブクラスをnewによるオブジェクト作成(インスタンス化)を行う際、まずサブクラスのコンストラクタ部分が呼び出される。
サブクラスのコンストラクタの最初は、スーパークラスのコンストラクタが呼び出される(extendsされているから)。これが処理順序になる。
:復習:
コンストラクタは、classがインスタンス化される時に1度だけ呼び出されるメゾット。コンストラクタは、宣言、初期化、代入を一度に行う事ができる。コンストラクタは必ず定義される。
classにコンストラクタの記載がない場合は、引数を持たないコンストラクタが呼び出される。
mainクラスインスタンス化する際に、引数を定義した場合、サブクラスで定義されている同じ引数のコンストラクタが呼び出される。サブクラスでコンストラクタを呼び出した場合は必ずスーパークラスのコンストラクタが呼び出される。
mainクラス
引数あり
引数なし