开发者学堂课程【Scala 核心编程-基础:温故知新】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8993
温故知新
内容介绍:
一、封装
二、继承
三、静态属性和静态方法
一、封装
1、从封装的注意事项讲到特质,继承,超类,字段,匿名子类,伴生对象等等。简单进行回顾,打开手册,定为二级,简洁很多,找到封装,面向对象编程三大特征下的 scala 封装的注意事项,封装从整体是 scala 的机制,它的逻辑跟 java 是一样的,仅仅是形式上发生变化,在 scala 中它本身只有 private 和 public,也就是它把原先的四种访问设置简化到两种,它的逻辑变的很简单,可以访问或不可以访问,访问主要分为几个层面,第一任何地方都可以访问,全局的范围,就是 public。第二子类中可以访问,就是 private,第三是私有的,就是在本类或者半生类可以访问,三大类,简化了封装的逻辑。
2、从形式上它也提供了很多自动的方法,比如不需要写什么,只需要声明属性,本身就自动提供了对应 setter/getter 方法,属性的修饰符不一样,生成的 setter/getter 也不一样,比如声明的是 val,就只生成读的方法,如果是 var 就是读写方法,如果前面加 private,方法的修饰符就是 private,如果没有加 private,生成的setter/getter方法就是 public。
二、继承
1、继承的原理跟 java 是一样的,就是整个 java 为什么有以及它的机制是一样的,区别主要是方法重写这部分,scala 明确规定,重写一个非抽象方法需要用 override 修饰符。
2、类型转换的经典使用,isInstanceOf 方法和 asInstanceOf 方法,后面再写设计模式时还会用到这两个方法。
3、超类的构造,scala 的构造顺序如下:
//1 .Person... 完成对父类的构造
//2.默认的名字
//3.Emp .... 完成对子类的构造
//4.Emp 辅助构造器~
如果还有父类就继续从上面进行追踪。
4、在 scala 中覆写字段是用过方法进行实现的,就是在 scala 中覆写字段通过方法的重写进行实现的,java 字段的重写,准确的讲是字段的隐藏,这里面包含两个 java 的重要机制,一个机制是动态绑定机制,这个动态绑定机制也延续到了 scala 中,还有一个就是java字段其实是隐藏。
5、抽象类跟 java 几乎一样。
6、作业题,按照 java 的代码改写即可。
三、静态属性和静态方法
1、在 scala 中如何实现静态的使用效果,或者在 scala 中静态机制是什么?首先从语法层面,在 scala 中它去掉了scala关键字,但是为了跟 java 做到无缝接轨,它使用伴生对象实现静态的使用效果,第二点是在 scala 静态的底层,它实际上是用伴生对象对应的 MODULES 实现静态对象,通过这个对象实现静态的使用效果,因为 scala 只做了包装,它的核心是从底层原理看,伴生对象实现静态特性是依赖于 public static final MODULES 实现的。
2、apply 方法,当创建对象时,不用 new,直接把它放在 apply 中,通过 apply 方法加上伴生对象可以实现单例,在构造期可以加 private,如果实现某个对象的单例,创建 singletondome,选择 object。
package com. atguigu. chapter08. homework
object SingleTonDemo {
//实现单例
def main(args: Array[String]): Unit = {
val dog = Dog new不出,运行会显示报错,因为加了 private,如果打开,创建是没有问题的,运行不会报错
Println(dog)执行代码
}
class Dog private() { 有一只狗,加 private 把构造器挡住了
}
object Dog { 充分利用伴生对象,在伴生对象中可以使用对应的伴生类的私有方法和私有属性
var.. singleDeg:Dog=null 初始化给它一个值
def apply(): Dog = { 公开的 apply 方法
if (singleDog==null) { 如果 singleDog 等于 null
singleDog=new Dog( )做判断,是不是已经有实例对象
}
singleDog返回
}
运行代码,可以看到有一个dog@4ec6a292
package com. atguigu. chapter08. homework
object SingleTonDemo {
//实现单例
def main(args: Array[String]): Unit = {
val dog = Dog 因为是 val 所以更改不了
val dog2 = Dog再获取一个 dog2
Println(dog)执行代码
Println(dog2)看这两只狗是不是同一只狗
}
class Dog private() {
}
object Dog {
var.. singleDeg:Dog=null
def apply(): Dog = {
if (singleDog==null) {
singleDog=new Dog( )
}
singleDog
}
再运行代码,发现这两只狗是同一只狗。充分利用伴生对象和伴生类的关系。
3、接口里面有很多基本的语法。
4、特质的基本使用和再说明,特质的底层分析图,就是根据 trait 中只有抽象方法和非抽象方法,对应的内容是不一样的。
