创建类和对象
object Main {
// 定义类
class Person{ }
def main(args: Array[String]): Unit = {
println("Hello world!")
// 创建对象
val p = new Person()
println(p)
}
}
}
package level01
//class 类
// var 修饰的属性是可以被修改的
//val 修饰的属性是只读的,不能被修改
class Student(var name: String, val age: Int) {
def sayHi():Unit = {
println(s"我是${name},我今年${age}")
}
}
object Class01 {
def main(args:Array[String]):Unit = {
//创建对象
val stu1 = new Student("小花",18)
//调用对象的方法
stu1.sayHi()
stu1.name = "小花花"
}
}
(一)private
默认情况下,类的属性在可以通过对象.属性名的方式来获取,如果不希望在类的外部被访问,可以用private来修饰
package level02
object Class02 {
class Student(val name: String, val age: Int) {
//private:私有的。不对外公布,不对外发布
private val hobbies:String = "躲在被子里"
private def hobby():Unit = {
println(s"${name},${age}")
}
def sayHi(): Unit = {
println(s"${name},${age}")
hobby() // 在类的内部,可以调用私有方法
}
}
def main(args: Array[String]): Unit = {
val stu = new Student("小花", 18)
stu.sayHi()
// pruntln(stu,hobbies)
//stu.hobby() //在类的外部,无法访问私有属性
}
}
package level02
object Class03 {
// 判断类和对象的关系
// 方式1: 对象.getClass()
// 方式2: 对象:isInstanceof[类]
class Student() {}
class Teacher(){}
def main(args:Array[String]): Unit = {
val age:Int = 1
val stu = new Student()
//stu是对象名
//Student是类名
//stu是Student的实例。
//返回类名
println(stu.getClass)
println(age.getClass)
//注意:[],结果是boolean值
println(stu.isInstanceOf[Student]) // true
println(stu.isInstanceOf[Teacher]) //false
}
}
package level02
object Class04 {
//目标:改进类的代码,让它在println的时候,输出的信息更友好一点
// 重写 toString方法
//(1)override 重写,覆盖
//(2) toString方法,是每个对象都会自带的一个方法,当我们使用println时。它就会自动被调用,返回一个字符串,就是输出的内容
class Student(var name:String,var age:Int) {
override def toString: String = s"姓名:${name}"
}
def main(args:Array[String]): Unit = {
val stu1 = new Student("小花",18)
val stu2 = new Student("小花",18)
println(stu1)
println(stu2)
}
}
(二)判断类和对象的关系
当我们拿到一个对象时,如何知道它所属的类呢?
方法1: 对象.getClass()
方法2:对象.isInstanceof
package level02
object Class05 {
//目标:判断两个Student对象是否相等的依据是:学号相同 并且 姓名相同
class Student(var id:String,var name:String,var age:Int) {
//改写equals方法
//在使用 == 判断的时候,会自动调用
//如果返回true,则相等
// 如果返回是false,则不相等
override def equals(obj:Any): Boolean = {
println(s"比较是否相等.... ${this.id},${this.name},")
//在这里写自己判断逻辑
//把obj当做Student
val other = obj.asInstanceOf[Student]
this.id == other.id && this.name == other.name
}
}
def main(args:Array[String]): Unit = {
val stu1 = new Student("20240010","小花",18)
val stu2 = new Student("20240010","小花",19)
if(stu1 == stu2){
println("他们是同一个人")
}else{
println("他们不是同一个人")
}
//println(stu1 == stu2) // false
}
}
package level02
object Class06 {
//
//arr1.map(x => 2*x).filter(x=>x>5).foreach(println)
class Student() {
def sayHi: Student = {
println("sayhi")
this
}
def sayHello(): Student = {
println("sayHello")
this
}
}
def main(args: Array[String]): Unit = {
val stu1 = new Student()
stu1.sayHi().sayHello()
//arr1.map(x => 2 * x).filter(x => x > 5).foreach(println)
}
}