9.scala 伴生对象、伴生类、case class、case object

发布时间:2024年01月24日

概述

比较
case class vs class
1.toString equals hashcode 重写
2.不用 new
3.默认实现了序列化接口

case class vs case object
1.case class 修饰的类,必须要有参数列表
2.case object 修饰的对象,必须不能有参数列表

伴生

package com.fun.scala

object Person {

  def apply () ={
    println("apply object person")
    new Person
  }

  def main(args: Array[String]): Unit = {
    Person().test()

    // new Class
    val person = new Person
    // com.fun.scala.Person@35bbe5e8
    println(person)
    // class person apply
    println(person())
  }
}

class Person() {
  def apply() = {
    "class person apply"
  }

  def test(): Unit ={
    println("class test")
  }
}

结果如下:
在这里插入图片描述

case 相关特性

package com.fun.scala

object ExampleCase {

}

case object Person {
  def main(args: Array[String]): Unit = {
    val p1 = new PersonEx("test", 11)
    val p2 = new PersonEx("test", 11)
    // p1==p2 值 false
    println(s"p1==p2 值 ${p1==p2}")
    println(p1)
    val d1 = Dog("旺财")
    val d2 = Dog("p")
    // d1==d2 值 true
    println(s"d1==d2 值 ${d1==d2}")
    // Dog(旺财)
    println(d1)
  }
}

case class Dog(name: String)

class PersonEx(name: String, age: Int) {

}

结果如下图:
在这里插入图片描述

结束

scala 伴生对象、伴生类、case class、case object 至此结束。

文章来源:https://blog.csdn.net/2301_79691134/article/details/135689370
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。