クラスの基本 (6/7)
作成:2018-04-14 08:35
更新:2018-04-14 08:35
更新:2018-04-14 08:35
■継承について
クラスは、既にあるクラスを拡張して更に新しいクラスを作成することもできます。そのための機能が「継承」と呼ばれるものです。
継承は、既にあるクラスのインスタンス変数やメソッドをすべて受け継いで新しいクラスを作ります。継承元のクラスにある機能は、すべて継承して作られたクラスの中で理ようすることができます。この継承は、以下のようにして作ります。
では、実際に継承を利用したサンプルを下のリスト欄に挙げておきましょう。ここでは、MyObjと、これを継承したMyDataクラスを用意してあります。それぞれのインスタンスを作り、printDataで内容を出力しています。
MyDataクラスの定義を見てみると、このように記述されていますね。
このMyObjとMyDataのように継承関係にある2つのクラスでは、継承元であるMyObjを「スーパークラス」、継承して作られたクラスであるMyDataを「サブクラス」と呼びます。これは、Dartに限らず、多くのオブジェクト指向言語で使われる用語なのでここでしっかり覚えておきましょう。
継承は、既にあるクラスのインスタンス変数やメソッドをすべて受け継いで新しいクラスを作ります。継承元のクラスにある機能は、すべて継承して作られたクラスの中で理ようすることができます。この継承は、以下のようにして作ります。
class クラス名 extends 継承元クラス {
……略……
}クラス名の後に「extends」というものをつけ、その後に継承元となるクラスを指定します。これで、指定のクラスを継承した新しいクラスが作られます。では、実際に継承を利用したサンプルを下のリスト欄に挙げておきましょう。ここでは、MyObjと、これを継承したMyDataクラスを用意してあります。それぞれのインスタンスを作り、printDataで内容を出力しています。
MyDataクラスの定義を見てみると、このように記述されていますね。
class MyData extends MyObj { ……これで、MyObjを継承するクラスとしてMyDataが作成されます。このMyDataでは、mailというインスタンス変数があるだけですが、printDataの処理を見てみると、この他にnameとageというインスタンス変数も用意されていることがわかります。これらは、継承元であるMyObjクラスにあるため、MyDataクラスにあるものとして処理を記述できるのです。このMyObjとMyDataのように継承関係にある2つのクラスでは、継承元であるMyObjを「スーパークラス」、継承して作られたクラスであるMyDataを「サブクラス」と呼びます。これは、Dartに限らず、多くのオブジェクト指向言語で使われる用語なのでここでしっかり覚えておきましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
void main() {
MyObj taro = new MyObj.make('Taro', 35);
taro.printData();
MyData hanako = new MyData.make('Hanako', 'hanako@flower', 28);
hanako.printData();
}
class MyObj {
String name;
num age;
MyObj() : this.make('noname', 0);
MyObj.make(String name, num age){
this.name = name;
this.age = age;
}
void printData(){
String re = '<MyObj "' + this.name + '"(' + this.age.toString() + ')>';
print(re);
}
}
class MyData extends MyObj {
String mail;
MyData() : this.make('noname', 'no@mail', 0);
MyData.make(String name, String mail, num age){
this.name = name;
this.mail = mail;
this.age = age;
}
@override
void printData(){
String re = '<MyObj "' + this.name + ' [' + this.mail + '"](' +
this.age.toString() + ')>';
print(re);
}
}
※関連コンテンツ