Swift 系统学习 26 Swift语言中的继承, 多态和重写
来源:互联网 发布:c 代理商系统源码 编辑:程序博客网 时间:2024/06/05 01:07
//: Playground - noun: a place where people can playimport UIKit/* * 本节主要内容: * 1.Swift语言中的继承, 多态和重写 *//* * 父类: 角色Avatar * 子类: Player: Avatar Monster: Avatar * 子类: Magician: Player Warrior: Player * 子类: Zombie: Monster *//* * override重写;overwrite: 子类的方法覆盖父类的方法, 要求方法名和参数都必须相同, 访问权限不可以更严格; --> Swift扩展: 还可以重写属性(例如: 计算型属性) * overload重载: 在同一个类中的两个方法/多个方法, 拥有相同的方法名, 但是参数不同(参数个数/参数类型); 例如: Swift中init构造方法 *//* * final(最终的) --> 属性: 意味着子类无法重写该属性 --> 方法: 意味着子类无法重写该方法 --> 类: 意味着该类不能被继承 */func functionName() { print("hello ")}// 先创建父类: 角色class Avatar { // 名字 var name: String // 是否活着 var isAlive: Bool = true // 生命值 var life = 100 { didSet { // 赋值成功之后的状态描述 if life <= 0 { isAlive = false } else if life > 10000 { life = oldValue } } } // 添加描述计算型属性 var description: String { return "I'm Avatar: \(name)" } init(name: String) { self.name = name } // 自定义方法: 收到多少点攻击 func beAttacked(attack: Int) { life -= attack if life <= 0 { isAlive = false } }}// 玩家类class Player: Avatar { // 玩家独有的属性 var score = 0 // 分数 var level = 1 // 等级 // 重写父类的属性 override var description: String { return "I'm Player \(name)" } func getScore(score: Int) { self.score += score // 升级 if self.score > level * 100 { level += 1 } }}// 创建魔术师类class Magician: Player { // 魔法值 var magic = 100 // 重写父类的属性 override var description: String { return "I'm Magician \(name)" } // 治疗(加生命值) func heal(player: Player) { player.life += 10 }}// 创建战士类class Warrior: Player { var weapon: String? // 重写父类的属性 override var description: String { return "I'm Warrior \(name)" } // 子类重写父类的方法 override func beAttacked(attack: Int) { life -= attack / 2 }}// 创建怪兽类class Monster: Avatar { // 重写父类的属性 override var description: String { return "I'm Monster \(name)" } func attack(player: Player, amount: Int) { player.beAttacked(attack: amount) }}// 创建僵尸类class Zombie: Monster { // 类型 var type = "Default" // 重写父类的属性 override var description: String { return "I'm Zombie \(name)" }}// 实例化let magician = Magician(name: "Harray Potter")let warrior = Warrior(name: "Iron Man")let zombie = Zombie(name: "Vampire")let monster = Monster(name: "Gorilla")// 声明函数, 体现多态性func printBasicInfo(avatar: Avatar) { print("The avatar's name is \(avatar.name)") print("The life is \(avatar.life). He is \( (avatar.isAlive) ? "still alive" : "dead")")}// 调用函数printBasicInfo(avatar: magician)printBasicInfo(avatar: warrior)printBasicInfo(avatar: zombie)printBasicInfo(avatar: monster)/* * 课堂练习: * 1. 创建三个类,父类是描述专辑类Album, 两个子类, 分别描述录音室专辑类StudioAlbum和现场版专辑LiveAlbum * 2.父类: 专辑名字(属性), init, 自定义方法(返回字符串: 反应销售情况) * 3.StudioAlbum: 录音室名字(属性), init, 重写父类的自定义方法 * 4.LiveAlbum: 现场名字(属性); init, 重写父类的自定义方法 * 5.声明数组, 元素类型Album, 元素的值是实例化对象, 循环打印每个对象的属性的值 */
0 0
- Swift 系统学习 26 Swift语言中的继承, 多态和重写
- Swift 中的继承 与 重写
- Swift-继承、重写
- swift语言 继承和扩展
- 重写Swift中的set和get方法
- 13.Swift-继承与重写
- [Swift]Swift中的!和?
- swift中构造器的继承和重写
- Swift学习之继承
- Swift 基础学习(继承)
- Swift学习:2.13 继承
- 5、Swift语言中的字符和字符串
- Swift语言中的@available 和 #available
- Swift语言中的枚举和结构体
- Swift语言中的控制语句和函数
- swift学习笔记1-Swift中的问号?和感叹号!
- swift重写
- Swift语言中的协议
- 关于JS中的栈与队列
- 数字图像处理---平滑空间滤波器
- -团体程序设计天梯赛-练习集L1-002 打印沙漏
- 静态资源CDN公共库
- Volley源码完全解析
- Swift 系统学习 26 Swift语言中的继承, 多态和重写
- 比较生命周期,附带横竖屏切换最最简易方法
- 解决ClickableSpan中点击后ListView中item的长按冲突的问题
- 转载CSDN博客
- Trie树学习笔记
- 递增链表的去重复
- ASP.NET ZERO 学习 —— (8) 开发手册之基于令牌的身份认证&其他
- 对vector 中的结构体元素排序
- IntelliJ IDEA使用教程八 热部署插件 JRebel 安装激活及使用