scala学习笔记2:面向对象编程部分基础
以下主要记录的是看完scala in programming这本书Functional Objects(第六章)后的要点总结。
1,程序中可变对象(var)和不可变对象(val)使用的权衡问题
不可变对象(val)相比较可变对象(var)
优点:简单,没有状态的变化,没有多线程问题。
缺点:需要对象大量copy,比较损耗空间和时间。
(例如Java中的String也是不可变变脸,但是为了大量对象copy,我们有时会用StringBuilder)
2,基于scala实现一个基本类主要包含以下几个方面:
2.1 和Java不同,类可以直接带参数,参数不是成员变量,要引用对象中某个变量时得声明为fields。形式如下:
1 class Rational(n: Int, d: Int) { 2 val numer: Int = n 3 }
2.2 require进行条件检查,不符合条件会跑出异常
2.3 this使用和java相似
2.4 主构造函数和辅构造函数
和Java一样,scala中的类也可以有多个构造函数。但是scala中的构造函数有主构造函数和辅构造函数之分。像上面Rational的主构造函数就是this(a, b)的形式。任何辅构造函数必须先调用其他辅助构造函数或者主构造函数。这样约束,最终所有的构造函数都会调用主构造函数。
2.5 重载运算符
Java中没有运算符重载。scala中的运算符重载和C++中的运算符重载类似。
2.6 函数重载和Java相似
2.7 类型隐含转换
scala中的类型隐含转换形式如下(将Int类型转化为Rational类型):
implict def inToRational(x: Int) = new Rational(x)
隐式转换类型有范围限制,由于是后台自动做的,所以使用起来得小心,要不然都不知道是怎来的。