1 类的定义与使用
package com.lihaogn
object SimpleObjectApp {
def main(args: Array[String]): Unit = {
val person = new People()
person.name = "lisi"
println(person.name + ".." + person.age)
println(person.eat())
person.watchFootball("china")
person.printInfo()
}
}
class People {
// 定义属性
var name: String = _ // "_"是占位符,使用时需要指定数据类型
val age: Int = 10
private[this] val gender = "male"
def printInfo(): Unit = {
println("gender:" + gender)
}
// 定义方法
def eat(): String = {
name + "eat..."
}
def watchFootball(teamName: String): Unit = {
println(name + "is watching game of " + teamName)
}
}
2 构造器
类似Java中的构造方法用途。
package com.lihaogn
object ConstructApp {
def main(args: Array[String]): Unit = {
val person = new Person("lisi", 20)
println(person.name + " : " + person.age + " : " + person.school)
val person2 = new Person("zhangsan", 18, "Male")
println(person2.name + " : "
+ person2.age + " : "
+ person2.school + " : "
+ person2.gender
)
}
}
// 主构造器
class Person(val name: String, val age: Int) {
println("person construct enter...")
val school = "njupt"
var gender: String = _
// 附属构造器
def this(name: String, age: Int, gender: String) {
this(name, age) // 附属构造器的第一行代码必须要调用主构造器或者其他附属构造器
this.gender = gender
}
println("person construct leaving...")
}
3 继承
package com.lihaogn
object ConstructApp {
def main(args: Array[String]): Unit = {
val student = new Student("lisi", 20, "computer")
println(student.name + " "
+ student.age + " "
+ student.gender + " "
+ student.major
)
}
}
// 主构造器
class Person(val name: String, val age: Int) {
println("person construct enter...")
val school = "njupt"
var gender: String = _
// 附属构造器
def this(name: String, age: Int, gender: String) {
this(name, age) // 附属构造器的第一行代码必须要调用主构造器或者其他附属构造器
this.gender = gender
}
println("person construct leaving...")
}
// 子类特有的属性需要加var,否则外面访问不到
class Student(name: String, age: Int, var major: String) extends Person(name, age) {
println("Student construct enter...")
println("Student construct leaving...")
}
4 重写
package com.lihaogn
object ConstructApp {
def main(args: Array[String]): Unit = {
println(student.toString)
}
}
// 主构造器
class Person(val name: String, val age: Int) {
println("person construct enter...")
val school = "njupt"
var gender: String = _
// 附属构造器
def this(name: String, age: Int, gender: String) {
this(name, age) // 附属构造器的第一行代码必须要调用主构造器或者其他附属构造器
this.gender = gender
}
println("person construct leaving...")
}
// 子类特有的属性需要加var,否则外面访问不到
class Student(name: String, age: Int, var major: String) extends Person(name, age) {
println("Student construct enter...")
// 重写属性
override val school = "peking"
// 重写方法
override def toString: String = "Person: override def toString:" + school
println("Student construct leaving...")
}