00:00
接下来我们要了解的内容就是面向对象里边的核心概念了,类和对象啊,那这部分大家其实都比较熟悉,类是class,对象是object,我们都知道在面向对象语言里边。整个的处理流程其实就是要把所有的数据包装成对象啊,对象里边我们可以定义属性,可以定义方法,那代码的处理流程其实就是访问对象的属性,调用对象的方法,就是这样的一个过程。那类又是什么呢?啊,如果我们把对象看成是具体的事物的话,那类其实就是它的一个抽象,我们知道class在英文里边有类别啊,有类型这样的一个定义啊,对应的一个意思,所以呢,类其实就是当前具体事物的一个抽象,之后一类事物的一个模板。啊,所以我们在代码定义的过程当中,也是先去定义class。Class有了,那相当于现在的这个模板就有了,基于这个模板,然后再去创建,你有一个对应具体的这个类的实例,对象实例啊,这就是我们对于这个类和对象关系的一个理解啊,那接下来我们就先来回顾一下在Java当中是怎么样去定义一个类的,那Java当中也比较明确,比较简单,直接就是class关键字,然后后面加一个类名,然后再加上这个后面的类体就可以了。
01:29
呃,前面呢,我们可能会有一个修饰符,比如说呃,当前这个类是public的,那前面就是public class,然后加上类名,那如果说类是public的话,大家需要注意就是必须跟当前的原文件名称一致,那一般情况下,一个点Java源文件里边就只能有一个public类。所以这1.scla是不一样的啊,那整体来看的话,Scla里边对于类的声明的语法是基本上一致的啊,也是class关键字,然后加类名,加类体,前面是修饰符,大家要注意这个修饰符呢,是可以没有的,在SKY里边默认情况下,如果什么都不加,当前的这个类就是public。
02:15
它就具有这个公有的可见性,而且这个大家要注意,在呃,Skyla里边public这个关键字呢,它还不能直接加在这个类前面,加上反而就不对了,它默认就是不加就是public,然后另外还有一个特点,就是对于skyla原文件而言,一个文件里边可以有多个类,而而且就是说可以是这个public的类,对吧,不管是什么样的类都可以并排排开,这比Java就灵活很多了。接下来我们就在代码里边做一个具体的实现,大家来看一看SC当中的类是怎么样去定义的,我们还是去new一个scla的object啊,因为我们要做测试嘛,所以我们干脆就先把这个object定义出来,大家也可以单独的去定义一个这个class啊,这个也是完全没有问题的,我们现在就是TEST03。
03:07
Us背方法写出来,然后在同一个文件里边没有要求,我们可以直接再去进行的定义一个类,对吧?现在这个类呢,我们就用一个大家非常熟悉的学生类student来做一个说明,后面画括号跟着的就是类体,这里大家其实发现啊,前面什么都不加,默认其实就是public,但是你如果要是把这个public加上的话,反而这里的语法就不对了,这里就报错了。啊,所以大家要注意一下,前面不能加,然后接下来在里边呢,就可以定义对应的属性和方法了啊,那对于这个学生类来讲,我们定义一个定义几个基本的属性吧,比如说我们可以定义一个定义一个内,这是一个词string类型不出值,比方说我们就叫Alice,然后呢,呃,比方说我们再定义一个a int类型初值给一个18,接下来比说我们再定一个性别sex均类型初值,哎,比方说是male指男性啊这就是我们非常简单的定义属性的一些用法,然后大家会发现当前这个定义属性的时候,如果我们用v value声明的话,那相当于当前这个属性是不可变的啊,那这显然不符合实际情况啊,啊,那你总不能说所有的。
04:40
呃,学生啊,这是累嘛,那对应拗出一个student,呃,对应的这个对象来之后,那所有的学生难道都叫爱丽丝,都是18岁吗?啊,这个是不合理的啊,那所以这里边我们可以把它改成万啊,这只是举一个例子啊,那另外那就会发现了,在定义声明属性的过程当中,前面我们也是什么修饰符都没有加的,哎,那能不能前面加修饰符呢?当然是可以的,这里大家需要注意前面如果不加修饰符。
05:10
这跟class是一样的啊,就是class类还有这个属性,还有方法,他们前面如果什么修饰符都不加,那默认的就是public,就是公有的,那如果说你要非要在前面加上这个public的话,反而就不对了,哎,所以必须是我们都不加,就表示公有,默认是公有,那如果说我要是把它定义成私有的可以吗?这个其实是可以的啊,如果要想定义成私有的话,那就在前面加一个private修饰符。啊,那这里边其实要给大家解释一下,就是对于这个scla的底层啊,其实它是把这一个定义的属性确实是包装成了private的啊,因为大家知道如果真正是面对对象的这个封装特性的话,所有的属性我们不应该直接访问到,而是应该属性全部私有化,然后我们再定义一个public公开访问的方法。
06:07
可以定义它的这个get get对吧,可以去设置它的值,可以去访问它的值,这是Java并里边的一个定义的规范啊,那么SC拉呢,它其实就不需要我们再单独定义这些,它默认底层就实现了这样一套的封装特性啊,所以相当于也避免了Java里边我们大量的那些冗余代码啊,那当然了,就是说呃,对于这一个scla而言,如果说我们这里边真的想要不让外部就是直接对它做这样的一个访问的话,那这里边把它定义成private也是合理的,也是合法的。然后另外还有就是说,对于这个SKY里面的属性啊,有时候我们可能还希望他跟Java做一些兼容,就是在有一些这个框架里边啊,它支持做这个,呃,对应这个类,或者说这个支持的时候,它要求我们必须是符合那个抓并规范的,就它必须有显示的这个get set,要调用这个显示的get set方法那。
07:08
这种情况又怎么办呢?难道我们就只能还是用Java里边的那种方式啊,把它声明成private的,然后下面我们再单独去定义这个public对吧?呃,Get name,然后set,再再去定义这些吗?呃,其实也不需要大家都知道,就是呃,即使是Java,我们也可以引入比方说longb之类的工具啊,加一个at data这样一个注解啊,那这样就可以实现了,那我们在SKY里面呢,更加简单一点,我也可以,怎么样呢?想要去实现应的这个Java并规范的get set方法,那我就直接同样加一个注解,大家看这个注解叫property啊,这样的话就相当于直接把对应的那些符合抓面规范的。全部都创建出来了啊,这里创建之后就相当于age对应的有这些内容了,然后另外还有一个就是我们当前是给这个所有的属性都附了一个初值,哎,那有时候我们这个初值可能并不想要这样一个具体的值啊。
08:09
那这个时候又该怎么办呢?比方说这个sex啊,是当前我们给了一个male,那我不想给male怎么办呢?当然有同学可能说你可以给这个空字符串啊,哎,这样当然也是可以的,有时候我是真正意义上就想给他一个空值。那在这个属性定义的时候呢,其实是有这样一种方法的,大家看就是神奇的,像这个非常神奇的下划线就又出现了,我们可以直接给一个下划线放在这里,这就表示当前的这一个。当前我定义的这个sex啊,String它是一初,初值是一个空啊,那当然当然我们知道string本身是一个引用类型嘛,所以它对应的空当然就应该是一个nu了啊,那大家看这里其实是报错的,为什么报错呢?那是因为我们这里定义的sex是一个value,是一个不可变的一个类型,那你这里边给了一个空值,负了一个初值,显然我们后边是要更改它的值的嘛,哎,所以这里边如果是这种方法的话,必须把它定义成Y,这样就合理了。
09:17
啊,那当然前面这个int啊,那也可以给一个下划线,它定义成法,也可以给一个下划线的值,那它的初值应该是什么呢?那就不是nu了,因为这是value类型嘛,所以这里int类型的话,对应的就是零啊,那如果要是double类型对应的就是0.0对吧?布类型对应的就是初始值就是false啊,这就是这个下划线的这种作为属性初始值的这种用法,好,然后接下来我们可以在上边做一个具体的测试。那这个测试的话也非常简单,我们先创建一个对象,我们可以拗一个student,那么这里啊,我们并没有定义对应的这个构造方法,所以说我们这里边就直接把它扭出来就完事了,然后接下来呢,我们就要看能不能获取到对应的这些属性,然后看看能不能访问,能不能改它值了啊啊,那首先我们看的是之前这个student的。
10:25
Name second name是访问不到的,对吧,因为它是private是私有的属性。离这里边我们是不能访问艾属性,把这一句注掉,哎,你看当然其他的啊,它没有private修饰,那都是public,当然就可以直接访问了,所以这里如果我们直接想要。Print line啊,把当前student的配置直接打印出来的话是没有问题的,当然了也可以直接打印前student的。
11:02
X性别,那另外我们也可以把当前student的X直接做一个赋值啊,当前类似的话,那我们一个SIM对吧,然后再去做一个打印,我会看到它的值做了一个改变。那当然了,这里如果要是我们把这个sex直接改成了一个V,如果改成了这样的话,那这里面的负值就不成立了,对吧?哎,不能给这个可变的常量去做一个赋值操作。接下来我们运行一下,看看效果怎么样。大家看就是这样的一个效果,呃,当前打印edge默认的初值是零,然后呢,呃,一开始的这个sex默认的初值是,那然后后边对它做赋值之后,那么赋给什么值,就可以访问到打印出来什么样的值了,这就是关于类的定义以及创建啊,创建它的对象啊,然后访问对应属性的这样的一个测试。
我来说两句