//类和结构体相似,比如都可以拥有属性和方法.但是他们也有区别.如下:
//1.类初始化时不会默认有成员初始化器,这就意味着,如果你的类中有属性,那么你就必须要创建自己的初始化器
//类的起名要用驼峰命名法,第一个字母大写
class Animal {
var name: String
init(name: String) {
self.name = name
}
}
let animal = Animal(name: "北极熊")
print(animal.name)
//2.类可以继承.子类继承父类所有的属性和方法,且子类还可以创建自己的属性和方法.而且默认继承父类的初始化器
class Cat: Animal {
//子类默认继承父类的初始化器,但子类也可以定义自己的初始化器,但子类的自定义初始化器需要调用父类的初始化器super.init()
}
let cat = Cat(name: "🐈")
print(cat.name)
class Dog: Animal {
init(aname: String ) {
super.init(name: aname)
}
}
let dog = Dog(aname: "泰迪")
print(dog.name)
//3.方法重写.子类重写父类的方法,替代父类的方法
class Person {
var name: String
init(name: String) {
self.name = name
}
func canwalk() {
print("\(name)走起路来真好看")
}
}
class Gril: Person {
//重写父类的方法.这个方法就和父类没关系了.如果还想同时用父类里面的方法可以用super调用父类方法
override func canwalk(){
// super.canwalk()
print("\(name)已经进化到会飞了")
}
}
let gril = Gril(name: "小苍")
gril.canwalk()
//4.最终类.如果当你创建了一个类,不想让别人去继承,就在类的前面加上final关键字
final class Car {
//加上final这样别人就无法继承
}
//5.拷贝对象的时候.结构体是值类型,类是引用类型.
class Room {
var name = "浪费小屋"
}
var aroom = Room()
print(aroom.name)
var a_room = aroom
a_room.name = "大别业"
print(aroom.name)
//5.反初始化器
//deinit {
//在类销毁的时候调用
//}
//6.可变性.即使创建了一个常量的类,如果类里面有可变属性,那么可以改变这个属性的值
网友评论