Ric*_*ver 1 oop scala smalltalk
试图了解Scala的基本概念.因此,每次使用关键字"new"实例化Class时,我们都会获得一个新对象.使用object关键字声明的单个对象无法使用关键字"new"进行实例化,因为只能有一个.从某种意义上说,它是在编译时实例化的.
Int是一个案例类吗?5.07是Double的案例类吗?
4是一个对象吗?
类本身有时候,还是总是对象?
功能是对象.他们也是课程的实例?这如何组合在一起?
Scala是纯粹的面向对象的Smalltalk还是它在OO前端做出了一些妥协?
使用new运算符实例化类时,将获得该类的新实例.新实例是一个对象.
您可以使用object关键字声明单个对象.说它在编译时被实例化并没有任何意义.对象仅在程序运行时存在,而不是在此之前(例如编译程序时).一个object被实例化使用它的第一次.
Int是一个案例类吗?5.07是Double的案例类吗?
第4号和第5.07号只是课程Int和实例Double.在Scala中,它们的行为方式与对象相同,但幕后4和5.07并不是真正的对象.要理解这一点,您必须了解标准的Scala类层次结构.
层次结构的顶部是类型Any.一切都延伸了Any.Any有两种直接的亚型:AnyVal和AnyRef.
AnyVal是所有值类型的超类型.值类型是映射到JVM基元类型的类型(例如:Int- > int,Double- > double等).AnyRef 是所有引用类型("常规"对象)的超类型.在运行时,扩展的所有内容都是AnyRef幕后的对象,扩展的所有内容AnyVal实际上都不是对象; 它映射到基本类型.
案例类只是一种语法糖.案例类与普通类完全相同,只是编译器会自动为您添加一些方法(例如,它们适合于模式匹配).