おぼえがき_クラスの継承

継承
 新しくクラスを作るときに、既にあるクラスの機能を受け継ぐこと

書き方
 class 新クラス名 extends 継承したいクラス名

親クラス(スーパークラス)
 継承の元になるクラス
 
子クラス(サブクラス)
 継承して新しく作るクラス

継承すると子クラスは、親クラスのメンバー(フィールドとメソッド)を引き継ぐ。

class Calc {
 int m = 1;
 int sum(int i){
  return i + m;//...(4)
 }
 int sum2(int i){
  return i-m;//...(7)
 }
}

class Multiply extends Calc{
 void sum3(int i,int j){
  int k = sum(i);//...(3)(5)
  int n = sum2(j);//...(6)(8)
  System.out.println("mの値:" + m);//...(9)
  System.out.println("結果:" + (k*n));//...(10)
 }
}

public class sample19{
 public static void main(String[] args){
  Multiply multi = new Multiply();//...(1)
  multi.sum3(5,4);//...(2)
 }
}

実行結果
mの値:1
結果:18

流れ
(1)Calc型を継承したMultiply型のmultiオブジェクトを作る。
(2)multiオブジェクトのsum3メソッドに引数5と4を渡す。
(3)引数5を親クラスCalcのsumメソッドに渡す。
(4)引数5に1を足して6を返す。
(5)変数kに6が入る。
(6)引数4を親クラスCalcのsum2メソッドに渡す。
(7)引数4に1を引いて3を返す。
(8)変数nに3が入る。
(9)親クラスCalcのフィールドのmの値(1)を出力する。
(10)Multiplyのフィールドのkとnをかけた値(3x6=18)を出力する。


継承してできたクラスをさらに継承する例

class Calc {
 int m = 1;
 int sum(int i){
  return i + m;//...(5)(13)
 }
 int sum2(int i){
  return i-m;//...(8)(16)
 }
}

class Multiply extends Calc{
 void sum3(int i,int j){
  int k = sum(i);//...(4)(6)
  int n = sum2(j);//...(7)(9)
  System.out.println("mの値:" + m);//...(10)
  System.out.println("結果:" + (k*n));//...(11)
 }
}

class ExMultiply extends Multiply{
 void sum4(int i,int j){
  sum3(i,j);//...(3)
  int k = sum(i+2);//...(12)(14)
  int n = sum2(j+2);//...(15)(17)
  System.out.println("ex mの値:"+ m);//...(18)
  System.out.println("ex 結果:"+(k*n));//...(19)
 }
}

public class sample19{
 public static void main(String[] args){
  ExMultiply ex_multi = new ExMultiply();//...(1)
  ex_multi.sum4(5,4);//...(2)
 }
}

実行結果
mの値:1
結果:18
ex mの値:1
ex 結果:40

流れ
(1)Calc型を継承したMultiply型を継承したExMultiply型のmultiオブジェクトを作る。
(2)multiオブジェクトのsum4メソッドに引数5と4を渡す。
(3)引数5と4を親クラスMultiplyのsum3メソッドに渡す。
(4)引数5を親クラスCalcのsumメソッドに渡す。
(5)引数5に1を足して6を返す。
(6)変数kに6が入る。
(7)引数4を親クラスCalcのsum2メソッドに渡す。
(8)引数4に1を引いて3を返す。
(9)変数nに3が入る。
(10)親クラスCalcのフィールドのmの値(1)を出力する。
(11)Multiplyのフィールドのkとnをかけた値(3x6=18)を出力する。
(12)変数iの値5に2を足して7を親クラスCalcのsumメソッドに渡す。
(13)引数7に1を足して8を返す。
(14)変数kに8が入る。
(15)変数jの値4に2を足して6を親クラスCalcのsum2メソッドに渡す。
(16)引数6に1を引いて5を返す。
(17)変数nに5が入る。
(18)親クラスCalcのフィールドのmの値(1)を出力する。
(19)ExMultiplyのフィールドのkとnをかけた値(8x5=40)を出力する。