创建对象
- 基本语法 ```scala val | var 对象名 [:类型] = new 类型()
**2.案例实操**<br />(1)val修饰对象,不能改变对象的引用(即:内存地址),可以改变对象属性的值<br />(2)var修饰对象,可以修改对象的引用和修改对象的属性值<br />(3)自动推导变量类型不能多态,所以多态需要显示声明
```scala
class Person {
var name: String = "canglaoshi"
}
object Person {
def main(args: Array[String]): Unit = {
//val修饰对象,不能改变对象的引用(即:内存地址),可以改变对象属性的值
val person = new Person()
person.name = "bobo"
person = new Person() //报错
println(person.name)
}
}
构造器(主构造和辅助构造)
和Java一样,Scala构造对象也需要调用构造方法,并且可以有任意多个构造方法。
Scala类的构造器包括:主构造器和辅助构造器
主构造器
class Student(var name : String, val number : String) {
println("主构造器!")
}
主构造器的参数 会编译成字段 参数声明 不加val或者var 相当于private 从构造器定义在类内部,方法名为this
从构造器必须先调用已经存在的构造器
继承而来的字段不需要加var或者val
class UniversityStudent(name : String, number : String, val major : String) extends Student(name, number) {
......
}
重写父类的字段或方法 加 override 关键字
class 类名 (形参列表) { //主构造器
//类体
// 辅助构造器 必须用this
def this(形参列表) { //辅助构造器
}
def this(形参列表) { //辅助构造器可以有多个...
}
}
说明
(1)辅助构造器,函数的名称this,可以有多个,编译器通过参数的个数及类型来区分。
(2)辅助构造方法不能直接构建对象,必须直接或者间接调用主构造方法。
(3)构造器调用其他另外的构造器,要求被调用构造器必须提前声明。
(4) 辅助构造函数的第一个语句必须为对主构造函数的调用
案例实操
(1)如果主构造器无参数,小括号可省略,构建对象时调用的构造方法的小括号也可以省略。
class Person {
var name: String = _
var age: Int = _
def this(age: Int) {
this()
this.age = age
println("辅助构造器")
}
def this(age: Int, name: String) {
this(age)
this.name = name
}
println("主构造器")
}
object Person {
def main(args: Array[String]): Unit = {
val person2 = new Person(18)
}
}
输出
主构造器
辅助构造器
构造器参数
1.说明
Scala类的主构造器函数的形参包括三种类型:未用任何修饰、var修饰、val修饰
(1)未用任何修饰符修饰,这个参数就是一个局部变量
(2)var修饰参数,作为类的成员属性使用,可以修改
(3)val修饰参数,作为类只读属性使用,不能修改
对于case class的参数而言,主构造器的参数默认就是val类型的变量
2.案例实操
class Person(name: String, var age: Int, val sex: String) {
}
object Test {
def main(args: Array[String]): Unit = {
var person = new Person("bobo", 18, "男")
//未用任何修饰符修饰,这个参数就是一个局部变量
printf(person.name)
//var修饰参数,作为类的成员属性使用,可以修改
person.age = 19
println(person.age)
//val修饰参数,作为类的只读属性使用,不能修改
person.sex = "女"
println(person.sex)
}
}