15.6 同步练习

  1. 请描述两段式构造过程以及下列代码B类的构造过程。
  1. class A {
  2. var x: Int
  3. init(x: Int) {
  4. self.x = x
  5. }
  6. }
  7. class B: A {
  8. var y: Int
  9. init(x: Int, y: Int) {
  10. self.y = y
  11. super.init(x: x)
  12. self.x = self.generate()
  13. }
  14. func generate() -> Int {
  15. /* return some value */
  16. return 0
  17. }
  18. }
  1. 简述Swift在构造过程中的4种安全检查。

  2. 判断正误:一个属性重写了观察者后,就不能同时对getter和setter访问器重写。

  3. 判断正误:常量属性和只读计算属性都不能重写属性观察者。

  4. 判断正误:我们可以重写父类的实例方法和静态方法(或称为类方法)。

  5. 判断正误:final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。

  6. 判断正误:is操作符可以判断一个实例是否是某个类的类型。如果实例是目标类型结果返回true,否则为false

  7. 判断正误:使用as操作符转换为子类类型,这种转换被称为向下转型。

  8. 判断正误:AnyObject可以表示任何类的实例,而Any可以表示任何类型。

  9. 给定如下基类A

  1. class A {
  2. var x: Int
  3. init(x: Int) {
  4. self.x = x
  5. }
  6. }

则关于子类B的定义正确的是(  )。

A.

  1. class B: A {
  2. var y: Int
  3. init(x: Int, y: Int) {
  4. self.y = y
  5. super.init(x: x)
  6. self.x = self.generate()
  7. }
  8. func generate() -> Int {
  9. /* return some value */
  10. return 0
  11. }
  12. }

B.

  1. class B: A {
  2. var y: Int
  3. init(x: Int, y: Int) {
  4. super.init(x: x)
  5. self.y = y
  6. self.x = self.generate()
  7. }
  8. func generate() -> Int {
  9. /* return some value */
  10. return 0
  11. }
  12. }

C.

  1. class B: A {
  2. var y: Int
  3. init(x: Int, y: Int) {
  4. self.y = y
  5. super.init(x: x)
  6. }
  7. }

D.

  1. class B: A {
  2. var y: Int
  3. init(x: Int, y: Int) {
  4. super.init(x: x)
  5. self.y = y
  6. }
  7. }