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()方法