类和对象
scala是支持面向对象的,也有类和对象的概念。我们依然可以基于scala语言来开发面向对象的应用程序。
创建类和对象
用法
使用class来定义一个类 new来创建对象
参考代码
object _01ClassDemo {
// 创建类
class Person{}
def main(args: Array[String]): Unit = {
// 创建对象
val p = new Person()
println(p)
}
}
参考代码
1 如果类是空的,没有任何成员,可以省略{}
2 如果构造器的参数为空,可以省略 ()
object _02ClassDemo {
// 创建类,省略花括号
class Person
def main(args: Array[String]): Unit = {
// 创建对象,省略括号
val person = new Person
}
}
定义和访问成员变量
一个类会有自己的属性,例如:人这样一个类,有自己的姓名和年龄。在类中定义、和访问成员变量
参考代码
1 在类中使用 var/val
来定义成员变量
2 对象直接使用成员变量名称来访问成员变量
object _03ClassDemo {
class Person {
// 定义成员变量
var name = ""
var age = 0
}
def main(args: Array[String]): Unit = {
// 创建Person对象
val person = new Person
person.name = "zhangsan"
person.age = 20
// 获取变量值
println(person.name)
println(person.age)
}
}
使用下划线初始化成员变量
scala中有一个更简洁的初始化成员变量的方式,可以让代码看起来更加简洁。
用法
- 在定义var类型的成员变量时,可以使用_来初始化成员变量
String => null
Int => 0
Boolean => false
Double => 0.0
… - val类型的成员变量,必须要自己手动初始化
参考代码
object _04ClassDemo {
class Person{
// 使用下划线进行初始化
var name:String = _
var age:Int = _
}
def main(args: Array[String]): Unit = {
val person = new Person
println(person.name)
println(person.age)
}
}
定义成员方法
类可以有自己的行为,scala中也可以通过定义成员方法来定义类的行为。
- 使用
def
来定义成员方法
示例
1.创建一个Customer类
2.创建一个该类的对象,并调用printHello方法
- 步骤
1、创建一个Object,添加main方法
2、创建Customer类,添加成员变量、成员方法
3、在main方法中创建Customer类对象,设置成员变量值(张三、男)
4、调用成员方法
参考代码
object _05ClassDemo {
class Customer {
var name:String = _
var sex:String = _
// 定义成员方法
def sayHi(msg:String) = {
println(msg)
}
}
def main(args: Array[String]): Unit = {
val customer = new Customer
customer.name = "张三"
customer.sex = "男"
customer.sayHi("你好")
}
}
访问修饰符
和Java一样,scala也可以通过访问修饰符,来控制成员变量和成员方法是否可以被访问。
- 定义
可以在成员前面添加private/protected
关键字来控制成员的可见性。 scala中,没有public关键字,任何没有被标为private或protected的成员都是公共的 - 案例
定义一个Person类
在main方法中创建该类的对象,测试是否能够访问到私有成员
参考代码
object _02AccessDemo {
class Person {
// 定义私有成员变量
private var name:String = _
private var age:Int = _
def getName() = name
def setName(name:String) = this.name = name
def getAge() = age
def setAge(age:Int) = this.age = age
// 定义私有成员方法
private def getNameAndAge = {
name -> age
}
}
def main(args: Array[String]): Unit = {
val person = new Person
person.setName("张三")
person.setAge(10)
println(person.getName())
println(person.getAge())
}
}