15.Scala单例

Scala单例

Scala是完全面向对象的语言,所以没有静态的操作,即在Scala中没有静态的概念。但是可以通过单例对象来模拟类对象。若单例对象名与类名一致,则称该单例对象为这个类的伴生对象,这个类的所有静态内容都可以放在它的伴生对象之中声明。

语法

object Person{
	val country:String="China"
}
  • 单例对象采用object关键字声明
  • 单例对象对应的类称之为伴生类,伴生对象的名称与伴生类一致
  • 单例对象的属性和方法可以通过伴生对象直接调用使用
object Scala20_Object {

    def main(args: Array[String]): Unit = {
        //(3)伴生对象中的属性和方法都可以通过伴生对象名(类名)直接调用访问。
        println(User20.name)
        // println(User20.age) //类不能直接调用属性
    }
}

//(1)伴生对象采用object关键字声明
object User20 {
    var name: String = "zhangsan"
}

//(2)伴生对象对应的类称之为伴生类,伴生对象的名称应该和伴生类名一致。
class User20 {
    var age: Int = 18
}

apply

package cn.lpc.Cheapter06

object Scala16_apply {
    def main(args: Array[String]): Unit = {
        //       // 使用new 构造对象时,等同于调用类的构造方法
        //        val user = new User16()
        //
        //        //Scala中可以使用伴生对象的apply方法直接构建类对象
        //        val  user2 = User16.apply()
        //        // Scala可以自动识别伴生对象的apply方法,所以apply方法可以省略。
        //        // 编译器自动做
        //        //  apply方法不能省略参数列表的小括号,会导致使用有问题
        //        // apply强大在可以转换类型,可以返回不是伴生对象本身的类型
        //        val user3 = User16()
        //        val user4 = User16("weq")
        //
        //        //
        ////        new Range(1,2,4)
        ////        Range(1,3,4) ==> apply()方法
        //    }
    }
}

//class User16(name: String = "sad"){
//
//}
//
//object User16{
//    def apply(): User16 = new User16()
//    def apply(name: String): User16 = new User16(name)
//    // 使用apply返回不同的对象
//    def apply(Date : String) = {
//        "dasasd"
//    }
//
//}
发布了118 篇原创文章 · 获赞 5 · 访问量 7179

猜你喜欢

转载自blog.csdn.net/resilienter/article/details/103745580
今日推荐