Scala系列11:Scala类与对象,成员方法与变量,修饰符等详解

2020-09-28 19:22发布

0.类和对象

scala是支持面向对象的,也有类和对象的概念。我们依然可以基于scala语言来开发面向对象的应用程序。

0.1创建类和对象

用法

  • 使用class来定义一个类

  • 使用new来创建对象

示例

创建一个Person类,并创建它的对象

步骤

  1. 创建一个scala项目,并创建一个Object

  2. 添加main方法

  3. 创建类和对象

实现

  1. 在IDEA中创建项目,并创建一个Object(main方法必须放在Object中)

  2. 添加main方法

  3. 创建一个Person类

  4. object _01ClassDemo {

  5. // 创建类

  6. class Person{}


  7. def main(args: Array[String]): Unit = {

  8. // 创建对象

  9. val p = new Person()

  10. val p3:Person= new Person() //注意这种写法,和上面的写法一样,主要前后类型一致,可以省略。如果不一致(继承),则不可以省略

  11. println(p)

  12. }

  13. }

尖叫提示: 

           注意scala程序入口要在object单例中main方法里,这里先把类定义在object里。然后通过main方法进行演示。具体原因后面会继续分析。

1.定义和访问成员变量

一个类会有自己的属性,例如:人这样一个类,有自己的姓名和年龄。我们接下来学习在类中定义、和访问成员变量。

用法

  • 在类中使用var/val来定义成员变量

  • 对象直接使用成员变量名称来访问成员变量

示例

  1. 定义一个Person类,包含一个姓名和年龄字段

  2. 创建一个名为"张三"、年龄为20岁的对象

  3. 打印对象的名字和年龄

步骤

  1. 创建一个Object,添加main方法

  2. 创建Person类,添加姓名字段和年龄字段,并对字段进行初始化,让scala自动进行类型推断

  3. 在main方法中创建Person类对象,设置成员变量为"张三"、20

  4. 打印对象的名字和年龄

  5. object _03ClassDemo {

  6. class Person {

  7. // 定义成员变量

  8. var name = ""

  9. var age = 0

  10. }


  11. def main(args: Array[String]): Unit = {

  12. // 创建Person对象

  13. val person = new Person

  14. person.name = "zhangsan"

  15. person.age = 20


  16. // 获取变量值

  17. println(person.name)

  18. println(person.age)

  19. }

  20. }

1.1使用下划线初始化成员变量

scala中有一个更简洁的初始化成员变量的方式,可以让代码看起来更加简洁。

用法

  • 在定义var类型的成员变量时,可以使用_来初始化成员变量

    • String => null

    • Int => 0

    • Boolean => false

    • Double => 0.0

    • ...

  • 特别注意:val类型的成员变量,必须要自己手动初始化

示例

  1. 定义一个Person类,包含一个姓名和年龄字段

  2. 创建一个名为"张三"、年龄为20岁的对象

  3. 打印对象的名字和年龄

步骤

  1. 创建一个Object,添加main方法

  2. 创建Person类,添加姓名字段和年龄字段,指定数据类型,使用下划线初始化

  3. 在main方法中创建Person类对象,设置成员变量为"张三"、20

  4. 打印对象的名字和年龄

参考代码

  1. object _04ClassDemo {


  2. class Person{

  3. // 使用下划线进行初始化

  4. var name:String = _

  5. var age:Int = _

  6. }


  7. def main(args: Array[String]): Unit = {

  8. val person = new Person


  9. println(person.name)

  10. println(person.age)

  11. }

  12. }

2.定义成员方法

类可以有自己的行为,scala中也可以通过定义成员方法来定义类的行为。

定义

在scala的类中,也是使用def来定义成员方法

示例

  1. 创建一个Customer类

  2. 创建一个该类的对象,并调用printHello方法

步骤

  1. 创建一个Object,添加main方法

  2. 创建Customer类,添加成员变量、成员方法

  3. 在main方法中创建Customer类对象,设置成员变量值(张三、男)

  4. 调用成员方法

  5. object _05ClassDemo {


  6. class Customer {

  7. var name:String = _

  8. var sex:String = _


  9. // 定义成员方法

  10. def sayHi(msg:String) = {

  11. println(msg)

  12. }

  13. }


  14. def main(args: Array[String]): Unit = {

  15. val customer = new Customer

  16. customer.name = "张三"

  17. customer.sex = "男"

  18. customer.sayHi("你好")

  19. }

  20. }

3.访问修饰符

和Java一样,scala也可以通过访问修饰符,来控制成员变量和成员方法是否可以被访问。

定义

Java中的访问控制,同样适用于scala,可以在成员前面添加private/protected关键字来控制成员的可见性。但在scala中,没有public关键字,任何没有被标为private或protected的成员都是公共的

案例

  • 定义一个Person类

  • 在main方法中创建该类的对象,测试是否能够访问到私有成员

  1. object _02AccessDemo {


  2. class Person {

  3. // 定义私有成员变量

  4. private var name:String = _

  5. private var age:Int = _


  6. def getName() = name

  7. def setName(name:String) = this.name = name

  8. def getAge() = age

  9. def setAge(age:Int) = this.age = age


  10. // 定义私有成员方法

  11. private def getNameAndAge = {

  12. name -> age

  13. }

  14. }


  15. def main(args: Array[String]): Unit = {

  16. val person = new Person

  17. person.setName("张三")

  18. person.setAge(10)


  19. println(person.getName())

  20. println(person.getAge())

  21. }

  22. }

作者:涤生手记

链接:https://blog.csdn.net/qq_26442553/article/details/108383309

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。