1.Scala对象创建的三种方法
1)new:使用new关键字创建类的对象
2)伴生对象:使用object关键字创建一个单例对象
3)apply:apply是一个方法,需要在伴生对象中实现这个方法
//创建类使用class
class Stu(var name:String, var gender:String,var ID:String){
def sayHello():Unit ={
println(s"大家好,我是$name")
}
}
//创建对象使用new
object Stu {
// def apply(name: String, gender: String, ID: String): Stu = {
// var p = new Stu(name, gender, ID)
// p //方法中的最后一个语句被自动当作return值
// }
def apply(name: String, gender: String, ID: String): Stu = new Stu(name, gender, ID)
}
object TestClass {
def main(args: Array[String]): Unit = {
//不用new 就可以创建一个对象
var s1 = Stu("小花","女","20145")
// println(s1.name)
// s1.sayHello()
//获取当前对象对应的类? 找爸爸
// println(s1.getClass())
println("s".getClass())
println(100.getClass())
//验证某个对象是不是某个类的实例? 亲子鉴定
println(s1.isInstanceOf[Stu])
println(100.isInstanceOf[Int])
}
}
2.Scala对象的所属值
1)getClass:使用反射机制判断Scala对象所属的类
2)isInstanceof:判断对象是否属于某一个类型,A.isInStanceof[B]表示判断对象A是否属于类型B,实际上是判断A是否是B或者B的子对象
object Test01{
def main(args: Array[String]): Unit = {
val p1 = new Person2()
val p2 = new Person2()
val s = new Student()
val t = new Teacher()
//1.getClass
println(s"p1==p2 ? ${p1.getClass==p2.getClass}")
println(s"p1==p1 ? ${p1.getClass==p1.getClass}")
println(s"p1==s ? ${p1.getClass==s.getClass}")
println(s"p1==t ? ${p1.getClass==t.getClass}")
println(s"s==t ? ${p1.getClass==t.getClass}")
println(s"p1== ${p1.getClass},p2==${p2.getClass}, s=${s.getClass},t=${t.getClass}")
//isInstanceOF[]
println(s"p1 isInstanceOF Person2 ? ${p1 isInstanceOf[Person2]}")
println(s"p1 isInstanceOF Person2 ? ${p1 isInstanceOf[Person2]}")
println(s"s isInstanceOF Person2 ? ${s isInstanceOf[Person2]}")
println(s"t isInstanceOF Person2 ? ${s isInstanceOf[Person2]}")
println(s"s isInstanceOF Student2 ? ${s isInstanceOf[Student2]}")
}
}
class Person2{
var name = "person1"
}
class Student2 extends Person2{
}
class Teacher2 extends Person2{
}
3. Scala的对象相等性判断
1)equal方法:相当于Java中的equals方法
2)== 与 !=:相当于Java中的equals方法
3)eq与ne:相当于Java中的引用(使用 == 判断引用)
4.覆写equals方法
1)Scala的自定义对象相等性
在重写equals方法时,需要满足以下几个条件:
a.方法的名字不可以改变
b.参数列表一定要相同,参数类型是Any类型
c.重写方法时需要使用override关键字
根据不同的要求可以实现不同的方法体,重写equals方法的语法格式:
override def equals(other:Any): Boolean = {
true/false
}
2)覆写原则
a.反射性
b.对称性
c.过渡性
d.非空性