継承
ここでは継承 (inheritance) について説明します。
オブジェクト指向言語のクラス定義では、非常に重要な考え方です。
Swift に特化した話ではないですが念のため、「継承とは何か」 ということを説明しておきます。
継承というのはあるクラスが他のクラスの属性を引き継ぐことをいいます。
例えば、人 (Person) というクラスがあったとします。
そこで、従業員 (Employee) というクラスを新たに定義したいとします。
「従業員は人」ですから、従業員も人としての性質を持っていてしかるべきですね。
この場合、新たに Employee クラスを定義するなら、既存の Person クラスを利用して、プログラムが作れたらありがたいですね。 テスト済みのコードを再利用できたら生産性があります。
このようなとき、Person クラスから Employee クラスを継承します。これによって Person クラスの性質を引き継ぎ、さらに Employee クラスとして必要な 属性(例えば会社名など)を保持できるようにすれば良いわけです。
このとき、Employee に対する Person のように、より広い概念を指すほうのクラスを、スーパークラス (superclass) とか基底クラスといいます。
具体的なコードを記述するのは、イニシャライザなどのルールを理解している必要があるので、 大まかなルールだけここで説明しておきます。
継承するには次のようにします。
class クラス : スーパークラス { }
同様の意味の動作でも、継承したクラスでは、異なる関数を定義したい場合もあります。
その場合は、override という修飾子をつけてメソッドを定義します。
class Foo {
func f() {
print( "Foo.f()" )
}
}
class Bar : Foo {
override func f() {
print( "Bar.f()" )
}
}
var b = Bar()
b.f()
もし、継承したクラスでオーバーライドをされるのを防ぎたい場合は、final 修飾子をつけます。
class Foo {
final func f() {
print( "Foo.f()" )
}
}
class Bar : Foo {
}
var b = Bar()
b.f()