1.1scala class类
class类和java普通类差不多,是需要new的
class Teacher { var age: Int = _ //这里的下划线和0是一个意思 //重载的构造器和java里面的public Teacher(){}类似 def this(age: Int, name: String){ this() //必须得调用一次主构造器 this.age=age } }
1.2Scala Object类(单例对象)
在Scala中没有像Java一样的static语法,但是Scala中的Object类似于Java的static,它是一个单利,里边放静态的field和method。第一次调用object的时候就会执行object的constructor方法,也就是不在method代码中的代码,注意,只有第一次调用object的时候,才会执行constructor方法。并且object的constructor没有参数构造方法,只有无参构造方法。
object ObjectTest{ private var name:String="l4" println("我是方法以为的代码。。。。。。。。。。。。。。。。。") def objectMethod(): Unit ={ println("是否执行method方法???????????????") } def getName:String=name }
1.3伴生对象与伴生类
如果有一个class和一个跟class同名的object,那么我们就可以管class叫做object的伴生类,管object叫class的伴生对象。伴生类与伴生对象一定要在同一个.scala文件中。伴生类和伴生对象最大的特点就是可以互相访问彼此的私有属性。这种功能是满足类似于Java里的类既有静态变量又有普通变量
object ObjectTest { private var name: String = "l4" private var name1: String = "z4" def helloPrivate: Unit = { //调用伴生类的私有属性,,如果不是伴生类,那么是访问不到私有属性的,打印结果为 10 val objectTest = new ObjectTest println(objectTest.age) } } class ObjectTest { private var age: Int = 10 def helloPrivate: Unit = { //调用伴生对象的私有属性,如果不是伴生对象,那么是访问不到私有属性的,打印结果z4 println(ObjectTest.name1) } }
1.4Scala内部类
//外部类 class OutClass { val array = new ArrayBuffer[Inner]() //内部类,它从属于外部类的具体事例,跟java有本质上的区别 class Inner {} def getInner: Inner = { new Inner } }
1.5scala case class
case类就是自动模式匹配类,他会在编译时自动为你生成匹配的参数方法及构造函数等成员
case class CaseClass(a:Int, b:Int) object Demo{ def main(args:Array[String]){ var c = CaseClass(10,10) // Creating object of case class println("a = "+c.a) // Accessing elements of case class println("b = "+c.b) } }
当一个类被定为case class 时,scala会默认做如下工作:
(1)如果参数不加var/val修改,默认为val。
(2)自动创建伴生对象并实现apply方法,这样创建对象时不用写new,因为只要写上类名就会自动调用它的构造方法
(3)默认实现toString、hashCode、copy和equals方法
(4)默认是可以序列化的
(5)自动从scala.Product中继承一些函数;
(6)case class构造函数的参数是public级别的,我们可以直接访问;
(7)做模式匹配用