认识了变量、认识了函数、还认识了逻辑判断和循环。本篇是基础知识的最后一篇,我们一起来了解面(zui)向(niu)对(B)象(de)编程的概念——类。
类
“类”是面向对象编程中非常重要的概念。也是我认为非常贴近大家思考方式的一种编程方式。什么是类?你可以把类理解为一个虚拟化的概念。
什么是虚拟化的概念?举一个栗子。如果你看到这两个字:“手机”,你会想到什么?你的脑海里可能会涌现出以下这些概念:
1.一种通讯工具
2.有一个开关键
3.有一个屏幕
4.可以打电话
5.可以接电话
6.可以充电
7.有待机时间
8.有电池
……
上面这些仅仅是一个概念,只要是手机,就一定符合这个概念。在面向对象的编程里,我们把这种概念,就叫做“类”。
实例
思考一下,“手机”这个“类”和现在拿在你手里的手机有什么不同?
我们这里所描述的“手机”仅仅是一个存在于文字中、或存在于我们想象中概念(准确的术语,它是抽象的),只要符合这些概念所描述的功能,就可以称之为一部手机。比如你现在手里在玩的手机,你朋友的手机等等。都可以称之为“手机”,尽管它们可能品牌不一样,外观不一样,性能也不一样。
而拿在你手里的手机却截然不同,它是唯一的,就是你手里正在把玩着的那个实体的机器,不是别人的,尽管它可能和其他的手机一模一样,但它的确是独一无二的。它有固定的尺寸、有实体的电池、有固定的待机时间,更重要的是,有固定的主人(你)等等。它一定符合“手机”的概念,或者说,它一定是一个“手机类的物体”。而和概念完全不同的是,它是实际存在的,并不是一个存在于言语或思维中间的定义。
这种真实的村在,在编程世界里,我们称之为一个类的“实例”。如:“我的手机”就是“手机”的一个实例。
用代码来表述的类
如何用代码来表述一个类?我们在前面几篇教程中,已经接触了一部分编程的知识。现在,我们直接来看代码。
类一般是一个独立的文件,你可以在自己的项目src目录下,新建一个Shouji.ts文件(一般情况下,我们会让文件名和类名一致,以方便以后自己查阅)。然后敲入以上代码。让后,我们一起看以下这些代码都干了什么。
首先,我们通过class Shouji来定义了一个名字为Shouji的类,接下来就跟随了一对大括号。这对大括号和我们在前面学到的函数的大括号是一样的。用来标明了大括号中的代码是属于这个类(Shouji)的。所以,第一步,我们可以把代码进行简化,看成是下面这样:
class Shouji
{
}
这样,我们就定义好了一个类,那么,这个类可以干什么呢?在前面的示范代码中,我们看到了三个定义:
class Shouji
{
public zhuren:string;
public color:string;
private cpu:string;
}
public 和 private是个什么鬼?我们在前面的教程里,学到了var a:string=10来定义一个变量,对不对?这里所使用的public和private,你可以理解为和var的功能一样,都是用来声明一个变量。不同的是,他们赋予了后面的变量不同的访问权限。
这是类的定义里一个非常重要的部分。我们还是从手机的例子来说起。当你拿着一部手机的时候,别人能够看到什么?第一,能看到手机的颜色,第二,能知道手机是你的,第三,如果有人对电子产品足够熟悉,有可能能看的出手机品牌。
那么,他们能知道你的手机里有几个焊接点吗?别说他们了,你都不知道。这个时候如果开玩笑,就会说“你怎么不去问问我的手机呢,它或许知道”。
对了,手机有几个焊接点,这个还真是只有手机自己知道。在编程的世界里,我们把“焊接点”这种,除了手机自己,别人根本不知道的数值,成为“私有”。而那些是人都知道的数值,成为“公有”。而区分他们的方式,就是通过不同的关键字来定义。在上面的代码中,我们就是通过public来定义了“公有”变量zhuren和color,因此,大家都可以知道这个手机的主人(zhuren)和颜色(color),而通过private来定义了“私有”变量cpu,即大家都不会知道,这个手机的CPU型号是什么。
在类的定义中,这些定义好的变量,我们称之为“属性”。在上面的代码中,我们定义了zhuren、color、cpu三个属性,其中cpu是私有的。另外两个是公有的。公有属性和私有水星在编程中有什么区别?我们在后面会看到。
再继续向下来看代码,我们又增加了一个看起来跟我们前面教程所提到的函数很相像的部分:
class Shouji
{
public zhuren:string;
public color:string;
private cpu:string;
public kaiji():void
{
trace(this.zhuren+'的手机开机了');
}
如果把public kaiji换成function kaiji,或许你就会发现,这就是一个函数。和刚才变量的定义一样,我们通过public或者private替换了原来的function,来定义公有或者似有的函数。在类的定义中,我们把这种类的内部定义的函数,称之为“方法”。再来看我们刚才提供的范例代码,可以发现我们定义了两个公有的方法,kaiji和guanji,功能分别是打印“开机了”和“关机了”到控制台。
用代码来构建实例
类写好了,那么如何使用它呢?这时,就需要用到我们刚才介绍的实例的概念了,先看代码:
我们通过new操作符来构建了一个实例,然后给这个实例的zhuren、color进行了赋值,并且先后调用了kaiji和guanj两个方法。现在,我们可以清晰的看到public和private的不同了。在敲代码的时候,编辑器会给出我们代码提示,你可以看到,在代码提示中,有zhuren和color两个属性,唯独没有定义为private的cpu属性,因为它是私有的,无法从外部访问到。
如同世界上有千千万万个手机一样,我们也可以定义很多个实例,但是他们都将是Shouji这个类的实例,都拥有zhuren和color两个公有属性。下面,我们用代码来证实以下,实例之间是完全独立的(比如你和朋友的手机,虽然同款同色同型号,但是却是两部不同的手机)
小试验
修改Shouji的kaiji方法,变成下面这样:
public kaiji():void
{
trace(this.zhuren+'的手机开机了');
}
在构建实例的时候,额外构建一个实例,把刚才的代码变成下面这样:
运行代码,你就会发现控制台打印了两行不一样的文字:
到本篇为止,我们介绍了关于编程的基础知识和概念,从变量的定义、函数的定义和使用,到逻辑判断、循环执行。再到今天介绍的面向对象的基础知识。接下来,我们将通过视频教程的方式,真正开始编写自己的游戏作品。如果前面的基础知识还有没有掌握,可以翻回去看看。
领取专属 10元无门槛券
私享最新 技术干货