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)

    隐式转换类型有范围限制,由于是后台自动做的,所以使用起来得小心,要不然都不知道是怎来的。

  

原文地址:https://www.cnblogs.com/superhedantou/p/5904745.html