クラスを作ろう! (4/5)
作成:2016-08-06 09:02
更新:2016-08-06 09:02
更新:2016-08-06 09:02
■継承について
オブジェクト指向では、既にあるクラスを再利用するための仕組みも考えられています。それが「継承」です。
継承は、既にあるクラスの機能(プロパティやメソッドなど)をすべて受け継いで新たなクラスを作成することです。これにより、既に作成されているクラスを有効に活用することができるようになります。この継承は、以下のように利用します。
クラス名の後に、「extends ○○」というようにして継承するクラスを指定します。これで、その指定したクラスの機能をそのまま受け継いだ新しいクラスが作成できます。このextendsで継承しているクラスのことを「スーパークラス」、継承して新たに作ったクラスを「サブクラス」と呼びます。
実際に、簡単な例を掲載しておきましょう(下リスト参照)。ここでは、MyObjectと、これを継承したMyObject2という2つのクラスを作成しています。MyObjectにはnameプロパティ、MyObject2にはageプロパティが用意されています。が、MyObject2では、nameとageの両方の値を設定し表示しています。nameプロパティがスーパークラスにあるため、サブクラスのMyObject2では両方のプロパティが使えるようになっているのですね。
ここでは、コンストラクタの中でsuper(n);というメソッドを実行しています。このsuperは、スーパークラスを示すキーワードです。このようにsuper()とすると、スーパークラスにあるコンストラクタを呼び出すことができます。
また、super.print();というようにsuperの後にメソッドを指定すると、スーパークラスにあるメソッドを呼び出すことができます。
ここでは、MyObjectにもMyObject2にも、同じprintというメソッドが用意されています。サブクラスに、スーパークラスにあるものと同じメソッドを用意すると、サブクラス側では常にそのメソッドが呼び出されるようになり、スーパークラス側にあるメソッドは使われなくなります。
このように、サブクラスに同じメソッドを用意することでスーパークラス側にあるメソッドを隠蔽してしまうことを「オーバーライド」といいます。オーバーライドすることで、スーパークラスの機能をサブクラスで上書きし、変更できるのです。
継承は、既にあるクラスの機能(プロパティやメソッドなど)をすべて受け継いで新たなクラスを作成することです。これにより、既に作成されているクラスを有効に活用することができるようになります。この継承は、以下のように利用します。
class クラス extends 継承するクラス {
……クラスの内容……
}
クラス名の後に、「extends ○○」というようにして継承するクラスを指定します。これで、その指定したクラスの機能をそのまま受け継いだ新しいクラスが作成できます。このextendsで継承しているクラスのことを「スーパークラス」、継承して新たに作ったクラスを「サブクラス」と呼びます。
実際に、簡単な例を掲載しておきましょう(下リスト参照)。ここでは、MyObjectと、これを継承したMyObject2という2つのクラスを作成しています。MyObjectにはnameプロパティ、MyObject2にはageプロパティが用意されています。が、MyObject2では、nameとageの両方の値を設定し表示しています。nameプロパティがスーパークラスにあるため、サブクラスのMyObject2では両方のプロパティが使えるようになっているのですね。
■superについて
ここでは、コンストラクタの中でsuper(n);というメソッドを実行しています。このsuperは、スーパークラスを示すキーワードです。このようにsuper()とすると、スーパークラスにあるコンストラクタを呼び出すことができます。
また、super.print();というようにsuperの後にメソッドを指定すると、スーパークラスにあるメソッドを呼び出すことができます。
■オーバーライドについて
ここでは、MyObjectにもMyObject2にも、同じprintというメソッドが用意されています。サブクラスに、スーパークラスにあるものと同じメソッドを用意すると、サブクラス側では常にそのメソッドが呼び出されるようになり、スーパークラス側にあるメソッドは使われなくなります。
このように、サブクラスに同じメソッドを用意することでスーパークラス側にあるメソッドを隠蔽してしまうことを「オーバーライド」といいます。オーバーライドすることで、スーパークラスの機能をサブクラスで上書きし、変更できるのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
class MyObject { name:string; constructor(n:string){ this.name = n; } print():string { let msg:string = '<h1>My name is ' + this.name + ".</h1>" return msg; } } class MyObject2 extends MyObject { age:number; constructor(n:string, a:number){ super(n); this.age = a; } print():string { let msg:string = '<h1>My name is ' + this.name + ". I'm " + this.age + " years old.</h1>" return msg; } } var obj: MyObject = new MyObject("Taro"); var obj2:MyObject2 = new MyObject2("Hanako", 29); document.write(obj.print() + obj2.print());
※関連コンテンツ