类
类的定义
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。
在scala中,类不需要声明为public类型,一个Scala源文件中可以有多个类。
定义一个类后,可以使用关键字new来创建一个类的对象。 通过对象可以使用定义的类的所有功能。
构造器
Scala中的每个类都有主构造器,主构造器的参数直接放置类名后面,与类交织在一起。
注意:主构造器会执行类定义中的所有语句。
对象
可以使用关键字new来创建对象,然后访问类字段和方法。
object
在 Scala 中,没有 static,没有静态方法和静态字段,但是也为我们提供了单例模式的实现方法,那就是使用关键字 object。
object 相当于 class 的单个实例,通常在里面放一些静态的 field 或者 method;
它和类的区别是,object对象不能带参数。
object作用:
1.存放工具方法和常量
2.高效共享单个不可变的实例
3.单例模式
伴生对象
如果有一个class文件,还有一个与class同名的object文件,那么就称这个object是class的伴生对象,class是object的伴生类;
伴生类和伴生对象必须存放在同一个.scala文件中;
伴生类和伴生对象的最大特点是:可以相互访问,包括私有成员;
//伴生类
class Cat{
val id = 1
private var name = "miao"
def printName(): Unit ={
//在Cat类中可以访问伴生对象Cat的私有属性
println(Cat.speak+ name )
}
}
//伴生对象
object Cat{
//伴生对象中的私有属性
private val speak= "miao~~~: "
def main(args: Array[String]) {
val p = new Cat
//访问私有的字段name
p.name = "猫咪"
p.printName()
}
}
//执行结果 miao~~~: 猫咪
apply方法
apply方法是object 中非常重要的一个特殊方法;
apply方法通常是在伴生对象中实现的,其目的是通过伴生类的构造函数功能,来实现伴生对象的构造函数功能;
通常我们会在类的伴生对象中定义apply方法,当遇到类名(参数1,…参数n)时apply方法会被调用;
在创建伴生对象或伴生类的对象时,通常不会使用new class/class() 的方式,而是直接使用 class(),隐式的调用伴生对象的 apply 方法,这样会让对象创建的更加简洁;
main方法
同Java一样,在 Scala 中,如果要运行一个程序,也必须要有一个 main 方法,作为程序的入口;
Scala 中的 main 方法定义为 def main(args: Array[String]),而且必须定义在 object 中;
除了自己实现 main 方法之外,还可以继承 App Trait,然后,将需要写在 main 方法中运行的代码,直接作为 object 的 constructor 代码即可,而且还可以使用 args 接收传入的参数;
//在object中定义main方法
object Main_Demo1 {
def main(args: Array[String]) {
println("Hello World!")
}
}
//继承App Trait ,将需要写在 main 方法中运行的代码直接作为 object 的 constructor 代码即可,
// 而且同样可以使用 args 接收传入的参数。
object Main_Demo2 extends App{
if(args.length > 0){
println("Hello, " + args(0))
}else{
println("Hello World!")
}
}