Swift 11 Swift SubClassingとExtension概要 

> 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`と一致するべき。
![Screenshot 2023-10-18 at 4.09.23 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513806/f81b957c-1ea9-38b3-9f8c-05da4ab1d36d.png)
また、`SubClass{}`で`{OverRide{}}`された`SuperClass{}`の`Method()`呼び出して重複を消えます。
![Untitled.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513806/b3396946-cbe5-0131-ec53-d9d05dfdd1bd.jpeg)
# 十一・参　`SubClass{init{}}` 
SavingsAccount `Class{}`は金利について`var    `が追加に必要です。
従って、`{Instance{}}`が生成する時にinterestRate `Property = ...`が
`{init{}}`される様にするべきです。
```swift
 init(number: Int, balance: Float, rate: Float){
        interesRate = rate
        super.init(number: number, balance: balance)
    }
```
`{init{}}`課程で起こられる問題を避けるために`SuperClass{init{}}`は後で`call.`します。
# 十一・肆　`SubClass{}`使用する
```swift
let savings1 = SavingsAccount(number: 12311, balance:600.00, rate:0.07)
print(savaing1.calculateInterest())
savings1.displayBalance()
```
![Screenshot 2023-10-18 at 5.06.46 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513806/535819d6-4949-3851-9f83-21a32b2bd751.png)
![Screenshot 2023-10-18 at 5.13.12 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513806/e9e68032-fe78-0da7-3259-d396ca760a20.png)
# 十一・伍　extension Class {}
此れは、`SubClass{}`を作るとか`↓Reference`しなくても、既存の`Class{}`に`{method()}`、`init(){}`, `ComputedProperty: {}`,`subScript(:) ->{}`などと追加するために使用できます。
標準Double `Class{}`で二乗値を返すプロパティと立方体値を返すプロパティを追加すると仮定します。
```swift
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で直接に接近ができます。

```swift
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{}`で機能を追加する事ができる有用な方法を提供します。