[Swift]Class的概念与使用
一个class就像一张蓝图,我们可以定义一类共同的对象,比如一些属性,下面我们定义一个包含name,age的名为Human的类。
是不是很简单~当然,类里面的变量值是可以改变的。改变之前我们需要把这个类实例化
var you = Human()
然后就可以通过这个实例修改里面的属性变量了,就像这样~
通过上下对比,我们发现Human里面的name确实被改变了~
我们还可以提供一些值以供实例对象初始化,首先需要在类中添加一点初始化方法:
哦~感觉逼格越来越高了。使用的时候就要这样写了var h = Human(name: "Joe", age: 23)
如果像这样我们使用了初始化方法,就不需要默认值了。我们可以直接写变量和它的类型:
我们还可以在类里面定义方法,这一步你将看到非常熟悉的东西~
运行结果证明,里面的方法确实生效了~
注意:除了可选类型,我们需要初始化每一个实例变量:
运行结果是:
看看,我们貌似忘了初始化driver,然而,没关系!因为它是可选类型(就是后面加了?),默认nil。
我们还可以通过在类名后面加冒号再加父类的形式创建一个子类,尼玛好绕。。。看个例子就明白了~
运行结果
这样是不是一目了然了~一个子类继承了父类所以的属性变量和方法,当然我们也可以添加更多特别的属性变量和方法。这使得类有很好的扩展性。
一个子类能够使用父类所有变量:
瞧~我们可以使用color属性,就像普通的实例变量一样~尽管这是Racecar从父类继承来的~
不止属性,方法也可以这样调用~
是不是很方便呢~
有时,子类对于从父类继承来的方法,需要根据需求做一些调整,需要重写方法,也很简单!用关键字override就可以!
从运行结果我们可以看出,通过这种方式重写方法并不会对父类的方法造成影响!!!真是超方便!!!
一但重写了方法,父类的方法就隐藏起来了,哦,别慌,我们依旧可以使用它!
恩~看,通过关键字super,我们还是可以使用父类中的方法的~
如果想在init( )方法中重写继承到的变量值呢?直接改变?不,我们需要先要让父类初始化值。
看,如果不让父类初始化值,就会发生这样的情况。。。
最后,一个捆绑了一些变量和方法的类可以实现更为复杂的功能: