クラスを更に極める (2/4)
作成:2014-09-13 10:19
更新:2014-09-13 10:19
更新:2014-09-13 10:19
■オーバーライドについて
継承を利用すると、スーパークラスにあるプロパティやメソッドがそのまま使えるようになります。例えばスーパークラスにある機能をサブクラスで変更したい、と思うこともあるでしょう。そんなときに用いられるのが「オーバーライド」です。
オーバーライドは、スーパークラスにある機能をサブクラスで上書きして変更することです。例えばスーパークラスに「A」というメソッドがあったとき、そのサブクラスから「A」を呼び出すと、スーパークラスにあるAメソッドがそのまま実行されます。継承していますからね。
では、サブクラスに、まったく同じ「A」というメソッドをおいたらどうなるでしょう? するとサブクラスで「A」を呼び出すと、サブクラスに追加したAメソッドが呼び出され、スーパークラスにあるAは、もう呼び出されなくなるのです。これがオーバーライドの考え方です。
オーバーライドするメソッドは、メソッドの冒頭に「override」という修飾子を付けます。またメソッド名・引数・返値はすべて同じでなければいけません。どれかが違っているだけで、それは「別のメソッド」と判断されオーバーライドにはなりません。
下にオーバーライドの例を挙げておきます。ここでは、printDataというメソッドをサブクラスでオーバーライドしています。
オーバーライドは、スーパークラスにある機能をサブクラスで上書きして変更することです。例えばスーパークラスに「A」というメソッドがあったとき、そのサブクラスから「A」を呼び出すと、スーパークラスにあるAメソッドがそのまま実行されます。継承していますからね。
では、サブクラスに、まったく同じ「A」というメソッドをおいたらどうなるでしょう? するとサブクラスで「A」を呼び出すと、サブクラスに追加したAメソッドが呼び出され、スーパークラスにあるAは、もう呼び出されなくなるのです。これがオーバーライドの考え方です。
オーバーライドするメソッドは、メソッドの冒頭に「override」という修飾子を付けます。またメソッド名・引数・返値はすべて同じでなければいけません。どれかが違っているだけで、それは「別のメソッド」と判断されオーバーライドにはなりません。
下にオーバーライドの例を挙げておきます。ここでは、printDataというメソッドをサブクラスでオーバーライドしています。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
class Friend { var name:String init(name:String) { self.name = name } func printData() { println("\(self.name)") } } class BestFriend : Friend { var age:Int init(name:String, age:Int) { self.age = age super.init(name:name) } override func printData() { println("\(self.name) (\(you.age))") } } var you = BestFriend(name: "Taro", age: 30) you.printData()
※関連コンテンツ