类的继承和初始化1

 父类

class Parent {
var p1: String {
get{
return "dasf"
}
set {

}
}
var p2: Int = 5

func m() {
print("parent m")
}
final func n(){

} //不能被子类继承
}

   子类,方法的重写

class Child: Parent {
//如果要重写父类的存储属性
//1.重写后可以给它加观察者(新功能)
//2.可以把其改为计算属性 (但是不能减少其功能)
//3.父类的只读(只有get,或者let),子类不能添加观察者
// override var p1: String = "afa"

override var p1: String {
willSet {

}
}
// override var p1: String {
// 
// }

// override var p1: String {
// 
// get {
// return "dasdf"
// }
// set {
// 
// }
// 
// }
override func m() {
print("child m")
}

}

怎么创建一个Child()类型

let instance:Parent = Child()
instance.m()


//
//这种情况只添加memberwise init

struct Point {
var x: Int
var y: Int
}

let p = Point(x: 5, y: 6)

//这种自动添加memberwise 和默认

struct Point2 {
var x: Int = 1
var y: Int = 2
}

 这种不会添加

struct Point3 {
var x: Int = 1
var y: Int = 2

init(xx: Int) {
self.init(xx:xx,yy:1)
}
init(yy: Int) {
// x = 1
// y = yy
self.init(xx:1,yy: yy) //self是不能省略的
}
//写一个很全的构造函数,可以初始化所有的成员
init(xx: Int ,yy: Int){
x = xx
y = yy
}
}

 有3种调用的方法

let p3 = Point3(xx: 1)
let p3 = Point3(yy: 1)
let p3 = Point3(xx: 1,yy: 2)



原文地址:https://www.cnblogs.com/kangniuniu/p/4951125.html