scala 伴生对象有什么作用

scala中class创建的是伴生类,object创建的是伴生对象

伴生类中可以声明无参构造器和有参构造器,辅助构造器,属性,方法

伴生对象属于单例对象,也可以声明属性,方法,但是不可以声明构造器

scala创建对象可以通过new的方式也可以通过伴生对象的方式进行创建。但是如果想用伴生对象的方式进行创建就必须定义apply方法,在apply方法中通过new的方式创建对象。

val dog = Dog 默认是dog指向单列对象

val dog = Dog(“aa”)带有参数的就默认会调用单列对象的apply方法,如果单列对象中没有定义apply方法就会报错。apply方法属于伴生对象和伴生类的一个桥梁

参考Array的apply方法源码:

/** Creates an array of Intobjects */

// Subject to a compiler optimization in Cleanup, see above.

def apply(x: Int, xs: Int*): Array[Int] = {
val array =new Array[Int](xs.length +1)

array(0) = x

var i =1

for (x <- xs.iterator) { array(i) = x; i +=1 }

array

}

伴生对象和伴生类的简单介绍之代码:

// 伴生类

class Dog {
// val修饰:能访问,不能修改,相当于java中定义的一个成员变量,有getter方法,没有setter方法

val id:Int = 9527

//var修饰: 能访问,也能修改,相当于有getter,setter方法

var age:Int = 3

//private val修饰: 只能自己和伴生对象访问

private val nickname:String = “旺财”

// private[this] val修饰:相当于java中的private,只能自己访问

private[this] val name:String = “小黄”

private def printSalary(): Unit ={
/**

* 伴生对象中的属性相当于java中的静态变量,方法相当于静态方法: static double salary;

*/

println(Dog.salary)

val dog1 = new Dog();

println(Dog.myAge())

println(Dog.name)
}

}

/**

伴生对象

有object Dog也有class Dog

单例类

有object Dog没有class Dog

互为伴生关系的类和对象可以互相访问对方的使用private修饰的变量和方法

*/

// 在Dog类中,声明了一个 private val nickname:String = “旺财” 这样的变量

object Dog{
var name:String = “huangbo”

private val salary:Double = 1000000

// 这个方法一定被static修饰了。

def myAge():Int = {
return 18
}

def main(args: Array[String]): Unit = {
val dog:Dog = new Dog()

println(dog.id)

// 会报错 dog.id = 777

println(dog.age)

dog.age = 4

println(dog.age)

println(dog.nickname)

// 会报错 println(dog.name)

println(dog.printSalary())
}

}

了解更多大数据培训就业面试问题欢迎关注小编!

上一篇:java入门-----对象转型


下一篇:5、java Spring 使用注解开发