継承 (インヘリタンス)
今回は継承 (インヘリタンス) についてみていきます。
継承とは
JAVAでは既にあるクラスのメンバ(フィールド、メソッド)を引き継いで、拡張や変更部分のみを記載したクラスを作成するとこができます。この引き継ぐような性質を「継承」または「インヘリタンス」といいます。

動物ロボットの設計図をサンプルとして考え方を説明します。
(1)動物ロボットの設計図
動物ロボットの共通的性質や機能を集めた設計図です。「種類・重さ・サイズ」といった性質・属性を記載する部分と、「食べる・寝る」といった機能仕様が書かれた部分があります。
(2)哺乳類動物ロボット、鳥類動物ロボットの拡張設計
「犬は歩き、鳥は空を飛び、魚は泳ぐ」など動物ロボットの種類によっては特有の属性や機能がでてきます。そのような場合、ベースとなる動物ロボット設計図はそのまま利用し、属性や機能の拡張部分や変更部分を別の設計図として作ります。サンプルでは犬や猫などの哺乳類ロボット設計図には「歩く」という機能を追加し、鳥類ロボットの設計図には「飛ぶ」という機能を追加しました。
(3)設計図の見方
設計図にはベースとなる部分が書かれたものと、拡張や変更が書かれたものがあります。実際にロボット製作するときは当然両方の設計図をみて作成します。サンプルでは、哺乳類ロボットはベース部分に「歩く」という機能が追加されたもの、鳥類ロボットはベース部分に「飛ぶ」という機能が追加されたものができます。
サンプル
【Animal.java】
class Animal {
//フィールド
String kind; //種類
int weight; //重さ
int size; //サイズ
//メソッド
void eat(){ //食べる
System.out.println("食べています ムシャムシャ");
}
void sleep(){ //寝る
System.out.println("寝ています ZZzz…");
}
}

動物ロボットの共通的性質や機能を集めた設計図です。Javaでは設計図のことを「クラス」、性質・属性のことを「フィールド」、動作・機能のことを「メソッド」といいました。
【Mammal.java】
class Mammal extends Animal {
//メソッド
void walk(){
System.out.println("歩いています");
}
}
【Birds .java】
class Birds extends Animal {
//メソッド
void fly(){
System.out.println("飛んでいます");
}
}

哺乳類ロボットの拡張部分の「Mammal」クラスと、鳥類ロボットの拡張部分「Birds」クラスです。コードをみてもわかりますが拡張メソッドしか書かれていません。このように他のクラスの拡張や変更部分のクラスを「サブクラス」、拡張元のクラスを「スーパークラス」といいます。
スーパークラスとサブクラスの関係の記述は次のように書きます。
class サブクラス名 extends スーパークラス { }
「extends」でスーパークラスを指定することにより、スーパークラスのフィールドやメソッドを引き継ぐことができます。サンプルではメソッドの拡張しかありませんが、フィールドも拡張できます。
【Sample.java】
public class Sample {
public static void main(String[] args) {
Mammal mammal_robot = new Mammal();
Birds birds_robot = new Birds();
mammal_robot.eat();
mammal_robot.walk();
System.out.println("--------------");
birds_robot.eat();
birds_robot.fly();
}
}
歩いています
--------------
食べています ムシャムシャ
飛んでいます

6行目から拡張部分しか書かれていないMammalクラスのインスタンスでもスーパークラスのeatメソッドを呼び出すことができるのがわかります。同様に9行目はBirdsクラスのインスタンスからスーパークラスのeatメソッドを呼び出しています。このようにサブクラスはスーパークラスのフィールドやメソッドを呼び出すことができます。
2010 年 6 月 7 日 月曜日 【 カテゴリー: Javaの基本 】
