//: Playground - noun: a place where people can play
import 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, 元素的值是实例化对象, 循环打印每个对象的属性的值
*/
Swift 系统学习 26 Swift语言中的继承, 多态和重写
最新推荐文章于 2022-07-06 14:37:38 发布