Scala对象的创建
(1)new:使用new关键字创建类的对象
(2)伴生对象:使用object关键字创建一个单例对象
(3)apply:apply是一个方法,需要在伴生对象中实现这个方法
能够不使用new关键字来创建对象
//创建类使用class
class Stu(var name:String,var gender:String,var ID:String){
def sayHello(): Unit ={
println(s"大家好,我是$name")
}
}
//创建对象使用new
object Stu {
//apply 回车
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 TestClassReview {
def main(args: Array[String]): Unit = {
var s1 = new Stu("小花","女","20145")
println(s1.name)
s1.sayHello()
}
}
如何判断对象的所属类
方法1:对象.getClass() 使用反射机制判断Scala对象所属的类。
方法2:对象.isInstanceof[类] 判断对象是否属于某一个类型,A.isInStanceof[B]表示判断对象A是否属于类型B,实际上是判断A是否是B或者B的子对象。如果返回true,则表示A是B的子对象;false,A不是B的子对象。
//获取当前对象对应的类 ? 找爸爸
// println(s1.getClass())
println("s".getClass())
println(100.getClass())
//验证某个对象是不是某个类的实例 ? 亲子鉴定
println(s1.isInstanceOf[Stu])
println(100.isInstanceOf[Int])
能改写equals自定义判断对象是否相等
在Scala中有三种方法判断对象的相等性,这三种方法主要分为两大类,第一种和第二种为一类,第三种方法为另外一类。在大多数情况下(非空),equal方法和==比较的内容是相同的。三种判断方法如下:
(1)equal方法:相当于Java中的equal方法
(2)==与!=:相当于Java中的equal方法
(3)eq与ne:相当于Java中的引用(使用==判断引用)
override def equals(obj: Any): Boolean = {
// ID == obj.ID
// true
// 随机的返回true false
// random()的作用是产生一个0-10的随机数
// 1.自己等于自己
// if(this == obj){
// return true
// }
//2.同类比较
if(obj != null && this.getClass() == obj.getClass()) {
//自定义比较逻辑,这里假定:学号相等就是相等
//把obj强制转换为当前的类型
var s = obj.asInstanceOf[Stu]
return s.ID == ID
}
//3.其他就是false
false
//random() > 0.5
}
}
课后总结:
1.如何不使用new来定义对象?
在伴生对象中写一个apply,并返回伴生类的实例
2.如何判断一个对象所属的类?
方法1:对象.getClass() 使用反射机制判断Scala对象所属的类。
方法2:对象.isInstanceof[类] 判断对象是否属于某一个类型,A.isInStanceof[B]表示判断对象A是否属于类型B,实际上是判断A是否是B或者B的子对象。如果返回true,则表示A是B的子对象;false,A不是B的子对象。
3.如何判断两个对象是否相等?
4.如何改写equals?
在class中,用override def equals(obj:Any):Boolean = {true/false}
标签:9.23,obj,String,对象,equal,Stu,new,apply,ID From: https://blog.csdn.net/2402_87076449/article/details/142448827