クラス定義はclassキーワードから始まります。
init/deinitがそれぞれイニシャライザ、デストラクタ
サブクラスを作成した時に、スーパークラスのメソッドはorverrideキーワードをつける必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | // クラス定義 class Shape { var numberOfSides = 0 var name: String // initializer init (name: String) { self .name = name } // deinit デストラクタ func simpleDescription() -> String { return "A shape with \(numberOfSides) sides (\(name))." } } var shape = Shape(name: "7derection" ) shape.numberOfSides = 7 print(shape.simpleDescription()) // サブクラスの作成 // サブクラスは:でスーパークラス名を記載する class Square: Shape { var sideLength: Double init (sideLength: Double , name: String) { self .sideLength = sideLength // スーパークラスのイニシャライザをcall super .init(name: name) numberOfSides = 4 } func area() -> Double { return sideLength * sideLength } // スーパークラスの関数をオーバーライドする時には、overrideキーワードが必須 override func simpleDescription() -> String { return "A square with sides of length \(sideLength)." } } let testSquare = Square(sideLength: 5.2, name: "sample square" ) print(testSquare.area()) print(testSquare.simpleDescription()) |
セッターゲッターはクラス変数を定義すると自動定義されますが
自分で処理を追加する事ができます。
(あまり多用するとよくなさそうですが)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // セッターゲッターに処理を追加することができる (あまり多用はよくなさそうだけど) class EquilateralTriangle: Shape { var sideLength: Double init(sideLength: Double , name: String) { self .sideLength = sideLength super .init(name: name) numberOfSides = 3 } var perimeter: Double { get { return 3.0 * sideLength } set { // newValueで設定する値にアクセスできる sideLength = newValue / 3.0 } } } var triangle = EquilateralTriangle(sideLength: 3.1, name: "triangle" ) print(triangle.perimeter) triangle.perimeter = 9.9 print(triangle.sideLength) |
0 件のコメント :
コメントを投稿