/*
Swift的继承
如果要重写父类的存储属性
1.重写后可以给它加属性观察器。列一:
2.可以把其改为计算属性(但不可减少父类属性原本的功能)。列二:
3.父类的只读(只有get,或者let),子类不能添加属性观察器。列三:
如果重写父类的计算属性
1.父类计算属性只有只读,子类重写后可以给其加上seter方法。列四:
方法继承。列五:
*/
//列一:
class Person {
var name: String = "cj"
}
class Child:Person {
override var name: String {
willSet {
}
didSet {
}
}
// override var name:string = "cj" 错误
}
//列二:
class Person2 {
var name: String = "cj"
}
class Child2:Person2 {
override var name: String {
get {
return "chenhe"
}
set {
}
}
}
//列三:
class Person3 {
var name: String {
return "chenhe"
}
let height: Int = 12
}
class Child3:Person3 {
// override var name: String {
// willSet {
//
// }
// didSet {
//
// }
// }
// override let height: Int {
// willSet {
//
// }
// didSet {
//
// }
// }
}
//列四:
class Person4 {
var name: String {
return "chenhe"
}
}
class Child4:Person4 {
override var name: String {
get {
return "chenhe"
}
set {
}
}
}
//列五:
class Person5 {
var name: String {
return "chenhe"
}
func x() {
print("你好")
}
}
class Child5:Person5 {
override func x() {
print("你们好")
}
}
//运行时多态
let a: Person5 = Child5()
a.x()
//初始化干两件事,分配空间,成员赋值
//结构体的初始化方法
struct Point {
var x: Int
var y: Int
}
//let p = Point 违背了初始化话原则,没有给成员赋值。下面这个就可以了列一:
let p = Point(x: 1, y: 2)
struct Point2 {
var x: Int = 4
var y: Int = 3
}
let p2 = Point2()//这样不会报错,分配了空间又给成员赋值了
struct Point3 {
var x: Int
var y: Int
//写一个很全的构造函数,可以初始化所有的成员
init(xx: Int,yy: Int) {
x = xx
y = yy
}
}