private
默认情况下,类的属性在可以通过对象.属性名的方式来获取,如果不希望在类的外部被访问,可以用private来修饰。
格式
| class 类名{private 属性private 方法} |
class Student(){
private val name:String;
}
object Test{
def main(args: Array[String]): Unit = {
val s = new Stuent()
s.name // 错误
}
判断类和对象的关系
方式一:对象.getClass()//找爹
方式二:对象.isInstanceof[类]//DNA对比
package txy
object Demo1 {
class Stu(){}
class Tea
def main(args: Array[String]): Unit = {
val st = new Stu()
val age:Int = 10
println(st.getClass)
println(age.getClass)
//返回类名
println(st.isInstanceOf[Stu])
println(st.isInstanceOf[Tea])
//返回boolean值
}
}
重写toString
为什么我们在打印类的对象的时候,输出的内容非常不好看?
如果我们希望改进这一点,可以通过重写toString方法来实现。
使用println来输出对象是,他会自动调用toString方法。
在Scala中,要重写一个方法,你需要使用override关键字。对于toString方法,你可以在你的类中定义它,并使用override来指明这是对父类方法的重写。
定义toString方法:
你可以在类的内部直接定义toString方法。这个方法通常不需要任何参数,并且返回一个String类型的结果。
package txy
object Demo2 {
class Stu(var name:String, age:Int) {
override def toString: String = s"姓名:${name},年龄:${age}"
//override:重写,覆盖
//toString:每个对象自带的方法,println时自动被调用并返回一个字符串,就是输出的内容
}
def main(args: Array[String]): Unit = {
val st = new Stu("mjq",18)
println(st)
}
}
如何判断两个对象是相等的
两个对象做比较==时,会自动调用equals方法。我们可以重写equals方法,并自己定义两个对象相等的标准
package txy
object Demo3 {
class Stu(val id:Int,val name:String,val age:Int) {
//使用equals方法
//在使用==判断的时候会自动调用
//返回true则相等,false则不等
override def equals(obj:Any):Boolean = {
println(s"比较是否相等.... ${this.id},${this.name},")
val other = obj.asInstanceOf[Stu]
this.id == other.id && this.name == other.name
}
}
def main(args: Array[String]): Unit = {
val s1 = new Stu(10001,"马嘉祺",18)
val s2 = new Stu(10001,"马嘉祺",19)
if(s1 == s2){
println("是同一人")
}else{
println("不是同一人")
}
}
}
链式
实现要点:把当前返回值设置为当前对象:
链式调用:.方法.方法.方法
package txy
class Stu() {
def s1(): Stu = {
println(1)
this
}
def s2(): Stu = {
println(2)
this
}
def s4():Stu={
println(4)
this
}
def s5():Stu={
println(5)
this
}
def s6():Stu={
println(6)
this
}
def s7():Stu={
println(7)
this
}
def s8():Stu={
println(8)
this
}
def s9():Stu={
println(9)
this
}
}
object Demo4 {
def main(args: Array[String]): Unit = {
val s = new Stu()
s.s1.s2.s4.s5.s6.s7.s8.s9
}
}