这张图说明了scala的数据类型继承关系,我们先看最上面的Any类型,Any类型是所有数据类型的爸爸,在它里面定义了equals,toString这些方法,类似于java的object。这一点和java还是比较类似的。
然后接着往下看,Any又有两个字类,左边的AnyVal以及右边的AnyRef。右边的先不管,那个主要是集合那边的知识,我们只看左边的。
AnyVal又被多个数据类型继承,这些就是日常常用的一些数据类型了,可以看到和Java类似,都是Int,Double,Long这些。对了,这些数据类型,Int,Double,Long什么的,都是类,不像java,还有分int和Integer。
最后再来看看最下面的Nothing和Null吧,把这俩货搁在一块说是因为这几个概念非常容易混淆,我自己要用的时候还得去查清楚了。
java的null(scala也可以用,不过n是小写):就是代表没有任何东西,即空。一般新建一个对象,默认值就是这货。 scala的Nothing:所有数据类型的子类,没有具体的值可以对应到这种类型,也就是说你没法为Nothing类型赋值,包括null也不行。那可能有的小伙伴就会问了,那要这个玩意干嘛呢?一般嘛,try catch的返回值就是这种类型,还有程序exit的时候也是返回它,大概就是在不需要返回值的时候,就返回这个意思意思。 scala的Null(注意大小写):是所有集合类的子类,这种类型只能使用null来赋值,可以说基本没什么卵用。只要知道有这么个东西就行。三.scala面向对象编程
是的,你没看错,虽然这里是用scala来进行函数式编程,但scala也同样提供了OOP的能力,后面有很大的概率也会说到,我们就顺带着简单介绍一下吧。

还是和java中的概念类似,只不过名字稍稍有些变化。对应过来大概是这样的:
java的interface -> scala的trait (其实trait更类似abstract class) java的abstract class -> 一样是abstract class java的class -> scala的class和object(关于class和object的区别,会在后面说)其中,虽然说java的接口对应的是scala的trait,但trait这个东西其实和interface还是有很多不一样的,比如可以定义变量,可以直接定义方法内容等。当然,没有构造器和无法接收参数这个还是不变滴。
trait Car {
val brand: String
}
trait Shiny {
val shineRefraction: Int
}
class BMW extends Car {
val brand = "BMW"
}
//通过with关键字,一个类可以扩展多个特质:
class BMW extends Car with Shiny {
val brand = "BMW"
val shineRefraction = 12
}
接下来重点说说class和object。
在scala中,是没有static这个关键字的,那么这样一来,很多java的功能就都没法实现,比如静态方法,或者是单例模式,或者是没有main方法。这个时候,object就出现了。









