swift 子类继承父类

时间:2022-06-28 17:38:04
//         子类的指定构造方法必须调用父类构造方法,并确保调用发生在子类存储属性初始化之后。而且指定构造方法不能调用同一个类中的其他指定构造方法;
// 便利构造方法必须调用同一个类中的其他指定构造方法(可以是指定构造方法或者便利构造方法),不能直接调用父类构造方法(用以保证最终以指定构造方法结束);
// 如果父类仅有一个无参构造方法(不管是否包含便利构造方法),子类的构造方法默认就会自动调用父类的无参构造方法(这种情况下可以不用手动调用);
// 常量属性必须默认指定初始值或者在当前类的构造方法中初始化,不能在子类构造方法中初始化;
// class Person{
var firstName : String,lastName:String
var age:Int=
var fullName:String{
get{
return firstName+""+lastName
}
}
init(firstName:String,lastName:String){
self.firstName = firstName
self.lastName = lastName
}
func showMessage() {
print("name=\(fullName),age=\(age)")
}
//通过final声明 子类无法重写
final func sayHello(){
print("hello world.")
}
} class Student:Person{ //重写属性监视器
override var firstName: String{
willSet{
print("oldValue=\(firstName)")
}
didSet{
print("newValue=\(firstName)")
}
}
var score:Double //子类指定构造方法一定要调用父类构造方法
//并且必须在子类存储属性初始化之后调用父类构造方法
init(firstName:String,lastName:String,score:Double){
self.score = score
super.init(firstName:firstName,lastName:lastName)
}
convenience init(){
self.init(firstName:"",lastName: "",score: )
}
//重写方法
override func showMessage() {
print("name=\(fullName),age=\(age),score=\(score)")
}
} let aa = Person(firstName: "test",lastName:"TEST")
aa.showMessage()
aa.sayHello()
let p = Student(firstName: "",lastName: "",score: )
p.firstName = "test"