理解构造器
构造器是一个函数,在new的时候,被自动调用,它的作用是实例化对象。
new Class() 就是在调用构造器,或者叫调用构造函数。
如:
object Main {
// 定义类
class Customer() {
println("构造函数被调用")
}
def main(args: Array[String]): Unit = {
val c = new Customer()
}
}
构造函数的参数
格式: class 类名([参数列表])
主构造函数的参数
1. var 是可以修改的属性
2. val 是不可以修改的属性
3.而没有使用val或者var修饰的,不是属性,不可在外部访问,不可改写。
辅助构造函数
格式:
辅助构造器的方法名固定为this,其参数不能使用var或val修饰,且必须在第一行代码中直接或间接调用主构造器。
演示:
class 类名(参数列表A) {
def this(参数列表B){
this(参数列表A)
其他代码
}
def this(参数列表C){
this(参数列表A)
其他代码
}
}
def main(args: Array[String]): Unit = {
new 类名(参数列表A) // 直接调用主构造器
new 类名(参数列表B) // 调用辅助构造器
new 类名(参数列表C) // 调用辅助构造器
}
如:
/* 类是属性的集合
Student 构造函数用来创造对象的
辅助构造函数 提供多种创建对象的方式*/
class MyStudent(var name:String, var age:Int) {
println("构造函数被调用...")
def sayHi():Unit = {
println(s"我是${name},我今年${age}")
}
/* 辅助构造函数
1.他的名字就是this
2.他内部的第一句代码必须是调用 主构造函数 this("无名氏",0)*/
def this() = {
this("无名氏",0)
println("构造函数1被调用...")
}
def this(name:String) ={
this(name,0)
println("构造函数1被调用...")
}
}
object f1028 {
def main(args: Array[String]): Unit = {
/*// 创建一个学生对象
val stu1 = new Student("小花",18)
// 调用对象的方法
stu1.sayHi()
stu1.age= 19
// 调用对象的方法
stu1.sayHi()
// 这里没有设置参数 他会调用辅助构造函数
val stu2 = new Student()
stu2.sayHi()*/
// 这里设置l参数 他会调用辅助构造函数
val stu3 = new MyStudent("小明")
stu3.sayHi()
}
}
//运行结果:
构造函数被调用...
构造函数1被调用...
我是小明,我今年0
private
在方法前面添加 private 那这个方法是私有的 他不能再class的外部被访问。
如:
object i1028 {
//私有 private
class Student1(var name:String, var age:Int) {
// 在方法前面添加 private 那这个方法是私有的 他不能再class的外部被访问
private def song():Unit = {
println("我在唱歌...")
}
def sayHi():Unit ={
println(s"我是${name},我今年${age}")
//私有方法 在类部是可以正常调用的
song()
}
}
def main(args: Array[String]): Unit = {
val stu3 = new Student1("小明",18)
stu3.sayHi()
//stu3.song() //会报错
}
}
//运行结果:
我是小明,我今年18
我在唱歌...