一、统一类型(Unified Types)
1.1 Scala类型层次解构
Any 是所有类型的超类型,也称为顶级类型。
Any 定义了通用的方法:equals、hashCode、toString
Any 有两个子类:AnyVal 和 AnyRef
AnyVal 代表值类型。分为四类八种 + Unit
四类八种:四类(整型,浮点型,字符型,布尔型)
整型:Byte(字节型)、Short(短整型)、Int(整型)、Long(长整型)
浮点型:Float(单精度浮点型)、Double(双精度浮点型)
字符型:Char(字符型)
布尔型:Boolean(字符型)
Unit:不带任何意义的值类型,仅有一个实例可以像这样声明:( )
AnyRef 代表引用类型。所有非值类型都被定义为引用类型。
AnyRef 包含 List、Option、YourClass
1.2 类型转换
1.3 Nothing 和 Null
Nothing 是所有类型的子类型(底部类型)。
作用:给出非正常终止的信号(抛异常、程序退出、无限循环)
不对值进行定义的表达式类型,或是一个不能正常返回的方法。
Null 是所有引用类型的子类型。
作用:主要是使得Scala 满足和其他JVM语言的互操作性。
有一个被关键字 null 定义的单例值。
二、类(Classes)
2.1 类定义
类的定义:关键字 class + 标识符(类名首字母应大写)
使用关键字 new 创建类的实例,
类没有定义任何构造器,默认只有一个无参构造器。
方法重写(Override)
toString方法
def toString: String = {
}
重写toString方法
override def toString: String = {
#重写toString方法的方法体
}
特殊使用:s
class Person(name: String = "名字",job: String = "工作")
{
override def toString() : String = {
//"名字:" + this.name + ",工作:" + job;
s"名字是$name,工作是$job";
}
}
var person01 = new Person()
println("重写toString():"+person01);
var person02 = new Person("小明","学生")
println("重写toString():"+person02);
var person03 = new Person(name="小明")
println("重写toString():"+person03);
var person04 = new Person(job="学生")
println("重写toString():"+person04);
2.2 构造器
类的有参构造器:在类名后面的小括号内阔以定义类的参数。
class Point(var x: Int,var y: Int)
给类的有参构造器的参数设置默认值。阔以在创建类的实例时,带名传参。
class Point(var x: Int = 0,var y: Int = 0)
Task:设置 Point 的 y 值,并打印到控制台。
val point2 = new Point(y = 22);
println(point2.y); //Console: 22
总结:
1、使用关键字 class 可以定义类。class 类名
2、在类名后的小括号内阔以设置类的参数。类名(var 参数1: 参数类型1,var 参数2: 参数类型2)
3、在创建类的实例时,阔以通过参数名为类的参数赋值。类名(参数=值)
4、阔以通过类的对象名调用类的参数值。对象名.参数名
2.3 私有成员和 Getter/Setter
class Person{
private var _name = "