Scala访问控制机制与方法重写详解
时间:2026-08-15 | 作者:宇宙开黑者 | 阅读:0主构造函数和辅助构造函数
package level02
// class 类
// var 修饰的属性是可以被修改的
// val 修饰的属性是只读的,不能被修改
//Student()构造函数(构造器),用来创造对象
class Student(var name:String, val age:Int) {
println("student...........")
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 = {
//创建对象
val stu1 = new Student("小花",18)
val stu2 = new Student()
val stu3 = new Student(20)
//调用对象的方法
stu1.sayHi()
//修改对象的属性
stu2.sayHi()
//调用对象的方法
stu3.sayHi()
}
}
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"${hobbies}")
}
def sayHi():Unit = {
println(s"${name},${age}")
hobby()//在类的内部可以调用私有方法
}
}
def main(args: Array[String]): Unit = {
val stu = new Student("小花",18)
stu.sayHi()//在类的外部无法访问私有属性
}
}
判断类和对象的关系
判断类和对象关系,常用两种方式:
- 方法1:对象.getClass()
- 方法2:对象.isInstanceOf[类]
package level02
object Class03 {
// 判断类和对象的关系?亲子鉴定?
// 方式1:对象.getClass() // 找爹
// 方式2:对象.isInstanceOf[类] // DNA对比
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) // class level02.Class03$Student
println(age.getClass) // int
// 注意:[], 结果是boolean值
println(stu.isInstanceOf[Student]) // true
println(stu.isInstanceOf[Teacher]) // false
}
}
重写toString
println输出对象时会发生什么
使用println来输出对象时,它会自动调用toString方法。
在Scala中,要重写一个方法,需要使用override关键字。对于toString方法,可以在类中直接定义它,并用override说明这是对父类方法的重写。
定义toString方法
toString方法通常不需要参数,并且返回一个String类型的结果。
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},年龄:${age}"
}
def main(args: Array[String]): Unit = {
val stu1 = new Student("小花",18)
val stu2 = new Student("小明",18)
println(stu1)
println(stu2)
}
}
判断两个对象是相等的?
两个对象做比较==时,会自动调用equals方法。
我们可以重写equals方法,并自己定义两个对象相等的标准。
package level02
object Class05 {
// 目标:判断两个Student对象是否相等的依据是学号相同姓名相同
// 目标equals方法
//在使用 == 判断的时候,会自动调用
class Student(val id:String,val name:String,val age:Int) {
override def equals(obj: Any): Boolean = {
println(s"比较是否相等...¥{this.id},${this.name},")
val other = obj.asInstanceOf[Student]
this.id == other.id && this.name == other.name
}
}
def main(args: Array[String]): Unit = {
val stu1 = new Student("2024101001","小花",18)
val stu2 = new Student("2024101001","小花",19)
if (stu1 == stu2){
println("他们是同一个人")
}else{
println("不是同一个人")
}
}
}
辅助构造器
这一部分的重点包括:
- 主构造函数的参数
- this关键字实现链式调用
- 辅助构造函数
- 案例练习
案例任务是定义一个学生注册信息类,包含姓名、电话、专业和身份证这几项信息。
注册时有两种方式可选:要么使用“姓名+电话”,要么使用“姓名+身份证”。
其中,电话、姓名和身份证都属于不可修改属性;专业则不是必填项,并且后续允许修改。
提示:提供 2 个构造器。
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)
}
}
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
