swift_Class类的继承

时间:2024-04-06 19:06:41

//: Playground - noun: a place where people can play

var str = "Hello, playground"

//*****************************Class类的继承

定义一个父类

swift代码:

class Parent{
//定义一个属性
var name :String?
//定义方法a
func a(){
print("这里是父类的方法a")
}

func b(){
print("这里是父类的方法b")
}
}

再定义个子类来继承父类Parent

语法就是使用:冒号

swift代码:

class Child :Parent{
//因为父类中有方法a
//子类中又有一个方法a
//所以需要使用关键字override来表示这个方法是父类的方法a,在子类中重写父类的方法a
override func a(){
print("这里是子类继承的父类的方法a")
}
}

继承的话,没什么多练的,大致上和Java是差不多的

再来练习一对继承的例子

/*    *************———————老师类 、、、、、、          */

swift代码:

class Teacher{

    //因为父类也是可以拥有自己独有并且私有的东西
//在Swift_Class类的继承中,
//使用final关键字,让属性,或者方法,变成这个Class类私有的属性跟方法,不让继承者去继承它们
//若这个属性在子类中不想变成计算属性,使用属性观察者
//var name :String? = "Jack"
//var age :Int? = 36
var name :String? = "undefined"
var age :Int? = 0 //介绍的方法
func introduce(){
print("大家好,我是高职部的老师,我叫\(name!),今年\(age!)岁,别看我年纪大,我还是很年轻的!?^_^")
} //给学生上课的方法
//老师自己独有的方法
final func give(){
print("今天给大家讲Class类的继承")
} //定义一个方法能让学生子类去继承的方法
//学习的方法
func study(){
print("希望大家能掌握这套方法去熟练掌握它变成自己的东西")
}
}

//OK,现在,

//定义一个子类,来继承那个老师类

/*    ********————————————学生类 、、、、、、          */

swift代码:

class Student :Teacher{

    //使用:冒号,在后面写上父类的类名
//这样,当前类就继承了那个类,成为了那个类的子类
//也就是说,当前类就会拥有父类的一些属性、方法,说一些是因为父类会有自己私有、独有的方法,子类不能继承的 //give,老师授课的方法是TeacherClass自己独有的方法,子类继承不了
//override func give(){ //}

//因为在Teacher这个父类在定义name\age属性时,不知道一个确定的、具体的Value,类型后面加了?,属性成为了一个属性值可为空的属性
//所以子类重写该属性时,需要解包,把父类可为空的属性转成一个具体的类型
override var name: String!{
willSet{
print("name属性value将要赋值为\(newValue!)")
}
didSet{
print("name属性value改变前的过期值:\(oldValue!)")
}
}
//override var name: String! = "Jason"
//使用属性观察者,这个属性就是存储属性
override var age: Int!{
willSet{
print("age属性value将要赋值为\(newValue!)")
}
didSet{
print("age属性value改变前的过期值:\(oldValue!)")
}
} /*******************************************
小结:
为什么Teacher类中定义的name和age是存储属性
Student类继承Teacher类,重写name和age后,却变成了计算属性 原因很简单,Student这个子类,它不知道Teacher这个父类中定义的属性是存储属性还是计算属性
子类Student只知道父类Teacher中定义的属性的名字和类型

这就是为什么父类Teacher被Student类继承后,子类Student将父类Teacher的存储属性重写成了计算属性
如果子类Student重写父类Teacher属性时,就是要重写成为存储属性,使用属性观察者
*******************************************/ //重写父类Teacher介绍的方法
//学生也可以向老师一样来介绍自己
override func introduce() {
print("大家好,我是\(name!),今年\(age!)岁")
} //重写父类Teacher学习的方法
//学生可以去把它掌握
override func study(){
print("好简单啊@!!3分钟就掌握了")
}
}

使用Teacher类和Student类

swift代码:

//************老师对象
let chenJun = Teacher()
chenJun.name! = "Tom"
chenJun.age! = 36 //介绍自己
chenJun.introduce() //授课
chenJun.give() //授予学习的方法
chenJun.study() //************学生对象
let me = Student()
me.name! = "张三"
me.age! = 21 //介绍自己
me.introduce() //掌握学习的方法
me.study()

代码执行结果:

大家好,我是高职部的老师,我叫Tom,今年36岁,别看我年纪大,我还是很年轻的!?^_^
今天给大家讲Class类的继承
希望大家能掌握这套方法去熟练掌握它变成自己的东西
name属性value将要赋值为张三
name属性value改变前的过期值:undefined
age属性value将要赋值为21
age属性value改变前的过期值:0
大家好,我是张三,今年21岁
好简单啊@!!3分钟就掌握了

/*****************************************************

总结:

swift中Class类的继承

1>只能单继承

2>重写父类属性、函数,需要使用Override表示

3>swift中所有的类都不可以继承Object

4>使用finl定义自己私有属性、函数,阻止子类重写

5>swift当前的版本没有抽象类的定义,包括抽象方法

******************************************************/

—————————————over