前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scala类与伴生类、单例

scala类与伴生类、单例

作者头像
用户1733462
发布2018-06-01 16:20:24
5420
发布2018-06-01 16:20:24
举报
文章被收录于专栏:数据处理

类似python元类与apply方法类似python中call方法

代码语言:javascript
复制
class Person(name: String, var age: Int){
  println("Person")
  //private[this] var age = 18 // 字段必须得初始化
  var gender:String=_
  def Age=age  //这个是方法
  def increamen(){age+=1}
  def this(name:String, age:Int, gender:String) {
    this(name, age)  //调用主构造函数
    this.gender = gender
  }
  override def toString() :String = {
    this.age+this.gender+this.name
  }

}

class Student{
  var age: Int = _
  private[this] var gender = "male"
  private var name: String = _

  def getName = this.name

  def setName(value:String){this.name=value}

  def this(age: Int, name: String) {
    this() // 调用主构造函数
    this.age = age
    this.name = name
  }
  override def toString(): String ={
    this.age+this.name
  }
}

// object 类命与class类命相同并且在一个文件中,伴生类,object下的成员都是静态的 ,
若有同名的class,这其作为它的伴生类。在object中一般可以为伴生类做一些初始化等操作

// 使用apply实现单例
object Dog{
  private var age = 0
  var instance:Dog = null
  def Age():Int = {
    age += 1
    age
  }

  def apply(): Dog ={
    println("obeject ApplyTest---apply()---")
    if (instance == null){
      instance = new Dog()
    }
    instance
  }
}

class Dog{
  var age1 = Dog.age // //Dog.age是object Dog的私有字段
  def apply(): Unit ={
    println("class Dog ---apply()---")
  }
}

object hW{
   def main(args:Array[String]): Unit ={
    var dog1 = Dog()
    println(dog1.age1)
    dog1()

    var dog2 = Dog()
    println(dog1.equals(dog2))
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.11.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档