scala的伴生类和伴生对象

image.png
object Companion {
  // 伴生类 和 伴生对象
  //    1、class和object在同一个scala文件中
  //    2、class和object要同名
  // 特征:
  //    1、伴生类和伴生对象可互访私有成员
  //    2、伴生对象 的apply方法,可简化 伴生类之对象 的创建
  // 感性认识:
  //    class里面的全是 非静态的,object里面的全是 静态的
  def main(args: Array[String]): Unit = {
    val person = new Person
    //    print(person.name)
    //    print(person.age)
    println(Person.param)
    //    Person.add()

    println(person.sum(11, 22))

    Person.printAge

    val p1: Person = Person.apply()
    val p2: Person = Person() // 相当于 Person.apply()
  }
}

//伴生类
class Person {
  val name = "Jacky"
  private val age = 20

  // 访问伴生对象的私有方法
  def sum(x: Int, y: Int) = Person.add(x, y)
}

//伴生对象
object Person {
  val param = "100"

  private def add(x: Int, y: Int) = x + y

  // 通过 伴生对象,访问 伴生类 的私有成员 时,必须要有 伴生类的对象
  def printAge = println(s"age=${new Person().age}")

  def apply(): Person = new Person()
}
image.png

Person带有参构造方法(上文系无参构造方法):

image.png

object Companion {
  // 伴生类 和 伴生对象
  //    1、class和object在同一个scala文件中
  //    2、class和object要同名
  // 特征:
  //    1、伴生类和伴生对象可互访私有成员
  //    2、伴生对象 的apply方法,可简化 伴生类之对象 的创建
  // 感性认识:
  //    class里面的全是 非静态的,object里面的全是 静态的
  def main(args: Array[String]): Unit = {
    val person = new Person("东莞", "MALE")
    //    print(person.name)
    //    print(person.age)
    println(Person.param)
    //    Person.add()

    println(person.sum(11, 22))

    Person.printAge

    val p1: Person = Person.apply("HZ", "M")
    val p2: Person = Person("SG", "F") // 相当于 Person.apply()

    println(p1.address + "~" + p1.sex)
    println(p2.address + "~" + p2.sex)

    val p = Person("FS", "MALE")
    println(p.address + "~" + p.sex)

    Array(1, 2, 3, 4)
    List(1, 2, 3, 4)
  }
}

//伴生类
class Person(val address: String, val sex: String) {
  val name = "Jacky"
  private val age = 20

  // 访问伴生对象的私有方法
  def sum(x: Int, y: Int) = Person.add(x, y)
}

//伴生对象
object Person {
  val param = "100"

  private def add(x: Int, y: Int) = x + y

  // 通过 伴生对象,访问 伴生类 的私有成员 时,必须要有 伴生类的对象
  def printAge = println(s"age=${new Person("SZ", "男").age}")

  def apply(address: String, sex: String): Person = new Person(address, sex)
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容