1.創(chuàng)建Person類(lèi)文件,繼承NSObject
2.創(chuàng)建Student類(lèi)文件,繼承自Person(父類(lèi))
3.在ViewController中實(shí)現(xiàn)以下方法
/**
在swift的同一個(gè)項(xiàng)目中(同一個(gè)命名空間下),所有的類(lèi)都是共享的,可以直接訪問(wèn),不需要import
所有對(duì)象的屬性 var,都可以直接訪問(wèn)到
*/
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//實(shí)例化 Person
//()-> alloc init
//Swift中對(duì)應(yīng)一個(gè)函數(shù) init()構(gòu)造函數(shù)
//作用 : 給成員變量分配空間,初始化成員變量
// let p = Person(name: "老三")
// print(p.name)
let s = Student(name: "老四", no: "001")
print(s.name + "------" + s.no)
}
}
4.在Person(父類(lèi))中實(shí)現(xiàn)以下代碼
/**
1.構(gòu)造函數(shù)的目的 : 給自己的屬性分配空間并設(shè)置初始值
2.調(diào)用父類(lèi)構(gòu)造函數(shù)之前,需要給本類(lèi)的屬性設(shè)置初始值
3.調(diào)用父類(lèi)構(gòu)造函數(shù),給父類(lèi)屬性分配空間,并設(shè)置初始值
NSObject沒(méi)有屬性,只有一個(gè)成員變量 'isa'
4.如果重載了構(gòu)造函數(shù),并且沒(méi)有實(shí)現(xiàn)父類(lèi) init 方法,系統(tǒng)不再提供init()構(gòu)造函數(shù)(默認(rèn)是會(huì)有的)
重載之后不再提供,因?yàn)槟J(rèn)的構(gòu)造函數(shù)不能給本類(lèi)的屬性分配空間
與OC方法相反
*/
class Person: NSObject
{
var name :String
//重寫(xiě) : 父類(lèi)有這個(gè)方法
override init()
{
print("Person init()")
name = "zhan"
super.init()
}
//重載 : 函數(shù)名相同,但是參數(shù)和個(gè)數(shù)不同
//重載可以給自己的屬性從外部設(shè)置初始值
init(name : String) {
//使用參數(shù)的name設(shè)置給屬性
self.name = name
//調(diào)用父類(lèi)的構(gòu)造函數(shù)
super.init()
}
}
5.在Student(子類(lèi))中實(shí)現(xiàn)以下代碼
class Student: Person {
var no : String
init(name: String , no : String)
{
self.no = no
//調(diào)用父類(lèi)方法給 name 初始化
super.init(name: name)
}
}