クラスを更に掘り下げる! (3/6)
作成:2018-04-21 09:24
更新:2018-04-21 09:24
更新:2018-04-21 09:24
■インターフェイス
今回も、クラスについて更にいろいろな機能を取り上げ説明していくことにしましょう。まずは「インターフェイス」についてです。
extendsを使った継承は、常に1つのクラスしか継承できません。複数のクラスを継承する、ということはできないのです。
あるクラスを作成するとき、別のクラスにあるメソッドを必ず用意させたい、と思ったとしましょう。こういうとき、どうするでしょうか。「抽象クラスを使う」というのは、あります。が、そのクラスは、既に別のクラスを継承して作ることが決まっています。そうなると、どうすればいいでしょうね?
抽象クラスは、必ず継承を使わないといけません。が、継承のような便利なものは、もっと強力なクラスの機能を利用するのに使いたいものです。ただ、「これこれのメソッドの実装を保証したい」というだけのために継承を使うのはもったいないですね。
こういうとき、役立つのがインターフェイスです。これは、他のクラスの機能(変数やメソッド)の実装を保証する役割を果たします。抽象クラスと同じように、インターフェイスとしてクラスを組み込むと、そのクラスにあるメソッドや変数を必ず実装しなければいけなくなるのです。
このインターフェイスという機能は、以下のように使います。
では、具体的な利用例を下のリスト欄に挙げておきましょう。ここでは、DataクラスとPrintクラスを用意し、これらをimplementsしたMyPrintDataクラスを作っています。これで、「データを保管するクラスは、必ずDataをimplementsする」「データを出力するクラスは必ずPrintをimplementsする」と決めておけば、データのあるクラスには必ずdata変数があり、出力するクラスには必ずprintNowメソッドがあるということになります。ということは、これらの変数やメソッドがある前提でスクリプトを作成できるようになる、ということなのです。
extendsを使った継承は、常に1つのクラスしか継承できません。複数のクラスを継承する、ということはできないのです。
あるクラスを作成するとき、別のクラスにあるメソッドを必ず用意させたい、と思ったとしましょう。こういうとき、どうするでしょうか。「抽象クラスを使う」というのは、あります。が、そのクラスは、既に別のクラスを継承して作ることが決まっています。そうなると、どうすればいいでしょうね?
抽象クラスは、必ず継承を使わないといけません。が、継承のような便利なものは、もっと強力なクラスの機能を利用するのに使いたいものです。ただ、「これこれのメソッドの実装を保証したい」というだけのために継承を使うのはもったいないですね。
こういうとき、役立つのがインターフェイスです。これは、他のクラスの機能(変数やメソッド)の実装を保証する役割を果たします。抽象クラスと同じように、インターフェイスとしてクラスを組み込むと、そのクラスにあるメソッドや変数を必ず実装しなければいけなくなるのです。
このインターフェイスという機能は、以下のように使います。
class クラス名 implements クラス名 , クラス名 , …… {インターフェイスは、implementsというものの後に、実装するクラスを指定します。複数あるときは、カンマで区切って記述をします。これで、implementsしたクラスにある変数やメソッドをすべてこのクラス内に用意しないとプログラムが実行できなくなります。
……略……
}
では、具体的な利用例を下のリスト欄に挙げておきましょう。ここでは、DataクラスとPrintクラスを用意し、これらをimplementsしたMyPrintDataクラスを作っています。これで、「データを保管するクラスは、必ずDataをimplementsする」「データを出力するクラスは必ずPrintをimplementsする」と決めておけば、データのあるクラスには必ずdata変数があり、出力するクラスには必ずprintNowメソッドがあるということになります。ということは、これらの変数やメソッドがある前提でスクリプトを作成できるようになる、ということなのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
void main() { var ob = new MyPrintData(["one","two","three"]); ob.printNow(); } class Data { var data = []; } class Print { void printNow(){} } class MyPrintData implements Data, Print { MyPrintData(List list){ this.data = list; } @override List data; @override void printNow() { for(var n in data){ print(n); } } }
※関連コンテンツ