inherit : receive (money, property, or a title) as an heir at the death of the previous holder.
~ appoint as heir’, from Latin in- ‘in’ + heres, hered- ‘heir’.
heir : a person legally entitled to the property or rank of another on that person's death
~ Old French from Latin 'heres' .
their : belonging to or associated with the people or things previously mentioned or easily identified.
~ Old Norse their(r)a ‘of them’,
前の章には例題で作ったClass{}
はどのクラスも相続していなかった。
今度の章にはSubClassingと相続そしてExtensionの概念を見ていく
十一・壱 相続、Class{}
そして下位Class{}
? hierarch : a chief priest, archbishop, or other leader.
~ Latin from Greek hierarkhēs, from hieros ‘sacred’ + arkhēs ‘ruler’.
? Hierachy: a system or organization in which people or groups are ranked one above the other according to status or authority.
~ The earliest sense was ‘system of orders of angels and heavenly beings’;
Class相続
通じてClassHierachy
を作ります。
Hierachyの最上位であるクラスをroot class
だっと言いて、相続されたクラスをsub class
だと言います。これが相続くれたクラスをsuper class
だと言います。
下位クラスをいくらでも持たすことができますけど、上位クラスは一つだけです。
真っ直ぐ
上のクラスを超えて、root class
を受けることもできます。
十一・弐 Overriding
Super Class
で今私が必要な機能だけを取るために、
受け継いだMethod()
をOverRiding
してsubClass内で新しいMethod()
を作ることです。
弐・甲 規則
まず、{OverRide{Method()}}
はSuperClass{}
の(Para,meter)
の個数と:Type
一致するべきです。
あとは、新しくてOverRide{}
する{Method()}
は必ずSuperClass{Method()}
が↑ return
する:Type
と一致するべき。
また、SubClass{}
で{OverRide{}}
されたSuperClass{}
のMethod()
呼び出して重複を消えます。
十一・参 SubClass{init{}}
SavingsAccount Class{}
は金利についてvar
が追加に必要です。
従って、{Instance{}}
が生成する時にinterestRate Property = ...
が
{init{}}
される様にするべきです。
init(number: Int, balance: Float, rate: Float){
interesRate = rate
super.init(number: number, balance: balance)
}
{init{}}
課程で起こられる問題を避けるためにSuperClass{init{}}
は後でcall.
します。
十一・肆 SubClass{}
使用する
let savings1 = SavingsAccount(number: 12311, balance:600.00, rate:0.07)
print(savaing1.calculateInterest())
savings1.displayBalance()
十一・伍 extension Class {}
此れは、SubClass{}
を作るとか↓Reference
しなくても、既存のClass{}
に{method()}
、init(){}
, ComputedProperty: {}
,subScript(:) ->{}
などと追加するために使用できます。
標準Double Class{}
で二乗値を返すプロパティと立方体値を返すプロパティを追加すると仮定します。
extension Double {
var squared: Double {
return self * self
}
var cubed: Double {
return self * self
}
}
let myValue: Double = 3.0
print(myValue.squared) // 9.0
注目する点はmyValue宣言する時 :Type
Doubleになる事に宣言すると
extension Property
を使用する事です。
此れはSubClass{}
を使うのではなくExtensionで追加されるもので、
Double valueで直接に接近ができます。
print(3.0.squared)
print(6.0.cubed)
ExtensionはsubClass{}
を使用せずに、 Class{}
の機能を拡張できる便利な方法を提供します。だがsubClass{}
もExtensionに比べで{Override{}}
とか保存Property
を生成する事ができます。
要約
相続は新しいClass{}
が既存の Class{}
で派生して新しい機能を追加する様な方法でObjectProgramming
でObject
再利用の概念を拡大します。
既存の Class{}
が使用者が欲しいな一部の機能を提供している場合、
相続は、既存のClass{}
を新しいSubClass{}
の基本形みたいに使えるようにしてくれます。
新しいsubClass{}
はSUPERClass{}
の全ての機能をinheritされるし、足りない機能を追加するため拡張されます。
SwiftのExtensionはSubClass{}
を生成しなくても既存の Class{}
で機能を追加する事ができる有用な方法を提供します。