package level02
//class类
//var 修饰时的属性可以被修改
//val 修饰时的属性不可以被修改
//1 主构造函数 class Student()
//2 辅助构造函数,提供更多的的来创建对象
class Student(var name:String,val age:Int) {
println("Student.......")
//辅助构造函数
//特点:1. 名字就是this 2. 第一句代码就是调用主构造器
def this() = {
this("未知的",18)//调用主构造器
println("辅助构造器被调用了...")
}
def this(age:Int)={
this("未知的",age)
}
def sayHi():Unit = {
println(s"我是${name},我今年${age}")
}
}
object Class01 {
def main(args: Array[String]): Unit = {
//创建对象,new 会自动调用构造函数
val stu1 = new Student("小花",18)
val stu2 = new Student()
val stu3 = new Student(20)
//调用对象的方法
stu1.sayHi()
stu2.sayHi()
stu3.sayHi()
//修改对象的属性
stu1.name = "小花花"
//调用对象的方法
stu1.sayHi()
}
}
private
类的内部,使用的私有方法;类的外部,无法访问私有属性
package level02
object Class02 {
class Student(var name:String,val age:Int) {
//private:私有的
private val hobbies:String = "躲在被子,打手电看恐怖小说"
private def hobby():Unit ={
println(s"${hobbies}")
}
def sayHi():Unit = {
println(s"${name},${age}")
hobby()//在类的内部,可以调用私有方法
}
}
def main(args: Array[String]): Unit = {
val stu = new Student("小花",18)
stu.sayHi()
//println(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)
println(stu.isInstanceOf[Student])
println(stu.isInstanceOf[Teacher])
}
}
package level02
object Class04 {
//目标:改进类的代码,让它在println的时候,输出的信息更友好一点
//重写 toString方法
//(1) override 重写,覆盖
//(2) toString 方法,是每个对象都会自带的一个方法,当使用println时,他会被自动调用,返回一个字符串,就是输出的内容
class Student(var name:String,val 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)
}
}
改写equals方法
判断两个student对象是否相互相等的依据是:学号相同且姓名相同
package level02
object Class05 {
//判断两个student对象是否相互相等的依据是:学号相同且姓名相同
class Student(val id : String,var name:String,val age:Int) {
//改写equals方法
//在使用==判断的时候,会自动调用
//如果返回true,则相等
//如果返回false,则不相等
override def equals(obj:Any):Boolean = {
println(s"比较是否相等.....${this.id},${this.name},")//this是指当前对象
//判断逻辑
//把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","小花",18)
if(stu1 == stu2){
println("他们是同一个人")
}else{
println("他们不是同一个人")
}
}
}
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()
//val arr1 = Array(1,2,3)
//arr1.map(x => 2*x).filter(x=>x>5).foreach(println)
}
}