Scala 面向对象

1.scala定义类,这点和java类似

/**
  * Scala中定义类:class 类名
  * 类中有属性 有方法
  * scala 中没有getter setter方法(java定义类有)
  * 定义属性时先要给出默认值或者使用占位符(使用占位符又要明确数据类型)
  */
class People {

  // 属性的定义: val/var 名称:类型 =  值
  //val 修饰的属性不可修改属性,var 修饰才可以修改属性
  var name:String = _  // _ 占位符  前提是一定要明确是什么数据类型
  //var name = "zhangsan"  跟上面定义一样的的含义,只不过给出了默认值
  var age:Int = 3

  // 私有,只能在本类中可用
  private var gender = "M"

  // 定义方法
  def playBall(team:String) = {
    println(name + " is playing ball of " + team)
  }

  def drink() = {
    name + " is drinking..."
  }
}

object SimpleClassApp {

  def main(args: Array[String]): Unit = {
    val people = new People   // 实例化一个Class对象
    people.name = "易建联"  // 为对象赋值
    people.age = 35

//    people.gender

    println(people.name + " : " + people.age )

    people.playBasketball("China")
    println(people.drink()) 
  }
}

2,构造器

/**
  * 类名(......)   主构造器
  */
class Person(val name:String, val age:Int) {

  println("进入Person构造器...")
  
  val job = "解说员"
  var team = ""

  /**
    * 附属构造器的名称 this
    * 每个附属构造器的第一行必须调用主构造器或者其他的附属构造器
    * 
    * 这一场景在spark源码中到处可见
    */
  def this(name:String, age:Int, team:String) {
    this(name, age)
    this.team = team
  }

  println("执行完Person构造器...")
}


//Student 类继承Person
class Student(name:String,age:Int,val major:String) extends Person(name, age) {
  println("进入Student构造器...")

  // 子类重写父类中的属性或者方法的修饰符
  override val job: String = "钟馗"

  /**
    * 如果 你想重写父类中的属性或者方法,需要使用override关键字来修饰
    */
  override def toString = name + "    " + job

  println("执行完Student构造器...")
}

子类构造方法/构造器执行之前一定要先执行父类的构造器,对于父类中没有的字段,要使用var/val修饰,否则访问不到

3.case class
case class 与class区别
1.case class 不用new,可直接使用
2.case class 底层默认实现了序列化
3.case class 必须要有参数列表
4.case class 重写了toString(),equals(),hashcode()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬瓜螺旋雪碧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值