《从零开始学Swift》学习笔记(Day43)——构造函数继承

简介:

Swift中的子类构造函数的来源有两种:自己编写和从父类继承。并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示。

  • 条件1:如果子类没有定义任何指定构造函数,它将自动继承所有父类的指定构造函数。

  • 条件2:如果子类提供了所有父类指定构造函数的实现,无论是通过条件1继承过来的,还是通过自己编写实现的,它都将自动继承所有父类的便利构造函数。

下面看示例代码:

class Person {           
    var name: String
    var age: Int
    
    func description() -> String {
        return "\(name) 年龄是: \(age)"
    }
    convenience init () {
        self.init(name: "Tony")
        self.age = 18
    }
    convenience init (name: String) {
        self.init(name: name, age: 18)
    }
    init (name: String, age: Int){       
        self.name = name
        self.age  = age
    }
}
 
class Student: Person {
    var school: String
    init (name: String, age: Int,school: String) {
        self.school = school
        super.init(name: name, age: age)
    }
    convenience overrideinit (name: String,age: Int) {  
        self.init(name: name, age: age, school: "清华大学")
    }
}
 
class Graduate: Student {    
    var special: String = ""
}


来看看符合条件1的继承,Graduate继承Student,Graduate类没有定义任何指定构造函数,它将自动继承所有Student的指定构造函数。符合条件1后,Graduate从Student继承了如下指定构造函数:

init (name
: 
String, age
: 
Int,school
: 
String)


再看符合条件2的继承,由于Graduate实现了Student的所有指定构造函数,Graduate将自动继承所有Student的便利构造函数。符合条件2后,Graduate从Student继承了如下3个便利构造函数:

init (name: String, age: Int)
init (name: String)
init ()


Student继承Person后有4个构造函数。

条件1对Student不满足,因为它有指定构造函数,Student类中的便利构造函数init (name: String, age: Int)满足了条件2,它实现了父类指定构造函数init (name: String, age: Int)。另外,由于子类构造函数与父类构造函数参数相同,需要使用override关键字,表示子类构造函数重写(overriding)了父类构造函数。

由于Student类实现了父类指定构造函数,因此也继承了父类的另外两个便利构造函数。



本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747499,如需转载请自行联系原作者

相关文章
|
存储 Java C#
30 如何在Swift中实现继承
如何在Swift中实现继承
252 0
|
存储 Swift 开发者
Swift 是一种现代编程语言,支持面向对象编程(OOP),包括类、对象、继承、多态等核心概念
Swift 是一种现代编程语言,支持面向对象编程(OOP),包括类、对象、继承、多态等核心概念。通过这些特性,Swift 能够帮助开发者构建结构清晰、可维护性强的代码。本文介绍了 Swift 中 OOP 的基本概念、高级特性和实际应用,并通过一个简单的 `Car` 类示例展示了如何在 Swift 中实现面向对象编程。
368 1
|
存储 Swift
Swift 继承
10月更文挑战第30天
181 0
|
安全 Swift 开发者
【Swift开发专栏】Swift类的继承与多态
【4月更文挑战第30天】Swift中的OOP聚焦于类继承与多态,提供代码复用和类型安全。继承通过`class`和冒号实现,子类继承父类属性和方法,支持单继承以降低复杂性。多态借助协议和类型兼容实现,允许统一处理不同类型的对象。继承用于构建复杂类,多态则使代码更通用、可扩展。理解并运用这些概念对Swift开发者至关重要。
312 0
|
API Swift
Swift实用小册13:Initializer构造函数的使用
构造函数是一种特殊的函数,主要用来在创建对象时初始化对象,为对象成员变量设置初始值。 在之前的章节中,我们在类、结构体中可以声明常量和变量,并给变量/常量赋予了初始值,但如果不同业务当中存在初始值不同的情况,按照之前的方式,我们需要在具体业务中重新赋值。
331 0
Swift实用小册13:Initializer构造函数的使用
|
存储 Java Swift
Swift实用小册12:Class类的继承
和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。 这同时也是对自己学习Swift语言过程的知识整理。
410 0
Swift实用小册12:Class类的继承
|
存储 安全 Java
Swift5.0 - day5-继承、初始化、可选链、协议(上)
Swift5.0 - day5-继承、初始化、可选链、协议(上)
368 0
Swift5.0 - day5-继承、初始化、可选链、协议(上)
|
Swift
Swift学习笔记——页面跳转
创建一个single view app后,项目中有main.storyboard,里面是一个viewcontroller。 那么我们如何实现页面跳转 首先添加一个导航控制器Navigation Controller。点击右上的➕,然后选择控件拖到面板上即可
1488 0
|
前端开发 测试技术 Swift
Swift学习笔记——新建项目
在xcode菜单中选择 new -> project -> single view app 点击next在弹出窗中填写项目名称 这里languge有可以选择object-c或swift作为项目语言。这里我们学习swift,所以选择swift。 如果language选择swift,下面的user interface可以选择swiftUI和storyboard。 SwiftUI是2019 年 WWDC 大会上,苹果在压轴环节向大众宣布了基于 Swift 语言构建的全新 UI 框架,与flutter类似,是用代码编写页面,支持快速预览。
1052 0
|
存储 Swift
Swift5.0 - day5-继承、初始化、可选链、协议(下)
Swift5.0 - day5-继承、初始化、可选链、协议(下)
216 0

相关课程

更多