a swift tourを読みながらサブクラスの作り方について勉強をしていました。
下記の様なサブクラスを作ることにあまり意味はないのですが、倣って作成してみたのですが、諸々エラーが発生し動作してくれません。
tourには具体的な説明がなくいきなりsuper.init()が使用されているのですが、superクラスのプロパティをサブクラスから初期化される場合にサブクラス側のイニシャライザーでこの様に書くものと解釈しています。
overrideはスーパークラスから関数を書き換える場合にこの様に書くものと解釈しています。
どこに問題点があるのか、アドバイスをいただけるとありがたいです。
よろしくお願い申し上げます。
swift
1class vehicle { 2 var wheel:Int 3 var name:String 4 init(name: String, wheel: Int) { 5 self.name = name 6 self.wheel = wheel 7 } 8 func announce()-> String{ 9 return "this is (name) with (wheel) wheel(s)" 10 } 11} 12 13var car = vehicle(name: "car", wheel: 4) 14print(car.announce()) 15 16var creature: vehicle { 17 var legs: Int 18 init(legs: Int, name: String){//Initializers may only be declared within a type 19 self.legs = legs 20 super.init(name:name)//'super' cannot be used outside of class members 21 } 22 override func announce()-> String{ //'override' can only be specified on class members 23 return "this is (name) with (legs) legs" 24 } 25} 26 27var human = creature(name: "human", legs: 2) 28print(human.announce())
a swift tourのコード
swift
1class NamedShape { 2 var numberOfSides: Int = 0 3 var name: String 4 5 init(name: String) { 6 self.name = name 7 } 8 9 func simpleDescription() -> String { 10 return "A shape with (numberOfSides) sides." 11 } 12} 13 14class EquilateralTriangle: NamedShape { 15 var sideLength: Double = 0.0 16 17 init(sideLength: Double, name: String) { 18 self.sideLength = sideLength 19 super.init(name: name) 20 numberOfSides = 3 21 } 22 23 var perimeter: Double { 24 get { 25 return 3.0 * sideLength 26 } 27 set { 28 sideLength = newValue / 3.0 29 } 30 } 31 32 override func simpleDescription() -> String { 33 return "An equilateral triangle with sides of length (sideLength)." 34 } 35}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/02 04:57
2020/11/02 06:10
2020/11/02 06:35
2020/11/02 06:50