类class
什么叫类class?
1. 类是属性和行为的集合。
(1) 属性也叫成员变量:名词,用来描述事物的外在特征
(2) 行为也叫成员方法:动词,表示事物能做什么
创建类和对象
在Scala中,用class来创建类,用new来创建对象。
定义和访问成员变量。
1. var/val 来定义成员变量
2. 对象可以通过对象名. 成员变量的方式来访问成员变量
定义和访问成员方法
类可以有自己的行为,scala中也可以通过定义成员方法来定义类的行为。
在scala的类中,使用def定义成员方法。
构造器
构造器是一个函数,在new的时候,被自动调用,它的作用是实例化对象。
new Class() 就是在调用构造器,或者叫调用构造函数。
主构造函数的参数
参数修饰符的三种情况:var 和 val的区别?
1. var 是可以修改的属性
2. val 是不可以修改的属性
3.而没有使用val或者var修饰的,不是属性,不可在外部访问,不可改写。
this关键字链式风格
this在类内部表示当前对象,我们可以利用这个特点实现对象方法的链式调用。
如何实现对象.方法1().方法2().方法3()...
格式:对象.方法1().方法2().方法3()...
原理:在方法中返回this
辅助构造函数
1. 构造函数(构造器)的作用是什么? 创建对象。
2. 构造函数只能有一个吗? 可以有多个。可以有很多个,其他的叫辅助构造函数。
3.格式:
辅助构造器的方法名固定为this,其参数不能使用var或val修饰,且必须在第一行代码中直接或间接调用主构造器
4.辅助构造器的作用
(1).提供多种初始化方式:
辅助构造器允许类提供多种初始化选项,使得创建对象时更加灵活。
(2).简化对象创建:
通过定义多个辅助构造器,您可以简化对象的创建过程,避免在主构造器中处理过多的参数。
(3).调用主构造器:
辅助构造器可以通过 this 关键字调用主构造器,从而确保所有初始化逻辑都集中在主构造器中。
// class类
//var 修饰的属性是可以被修改的
//val 修饰的属性是只读的,不能被修改
//Student() 构造函数(构造器),用来创建对象
// 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()
//修改对象的属性
stu1.name="小花花"
//修改对象的方法
stu1.sayHi()
stu2.sayHi()
stu3.sayHi()
}
}
object Class02 {
class Student(val name:String,var age:Int) {
// private:私有的。不对外公布,不对外发布,在外面不可以访问。在家之外的地方,不可以被别人知道....
val hobbies:String="躲在被子,打手电看恐怖小说"
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() //在类的外部,无法访问私有属性
}
}