Scala中的类和对象

45 阅读3分钟

一.面向对象的相关概念

1.什么是面向对象?

它是一种编程思想,它是基于面向对象的,强调的是以对象为基础完成各种操作。

2.面向对象的三大思想特点是什么?

(1)更符合人们的思考习惯

(2)把复杂的事情简单化

(3)把程序员从执行者变成指挥者

3.什么是类class?类是属性和行为的集合。

(1)属性也叫成员变量:名词,用来描述事物的外在特征

(2)行为也叫成员方法:动词,表示事物能做什么

例:学生有姓名和年龄这些是属性,学生要学习,要吃饭这些是行为。

4.面向对象的三大特征是

(1)封装

(2)继承

(3)多态

例: 封装,隐藏实现细节;继承,不劳而获的幸福;多态:丰富多彩的世界。

二.创建类和对象

在Scala中,用class来创建类,用new来创建对象。

object Main {
// 定义类
class Person{ }
  def main(args: Array[String]): Unit = {
    println("Hello world!")
    // 创建对象
    val p = new Person()
    println(p)
  }
}
}

三.定义和访问成员变量

  1. var/val  来定义成员变量

  2. 对象可以通过对象名 . 成员变量的方式来访问成员变量

object Main {
  // 定义类
  class Person{
    var age: Int = 20
    val name: String = "小明"
  }
  def main(args: Array[String]): Unit = {
    println("Hello world!")
    // 创建对象
    val p = new Person()
    println(p.name)
    p.age = 21
    println(p.age)
  }
}

四.定义和访问成员方法

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

def 方法名(参数1:数据类型 , 参数2:数据类型): [return type] = {
// 方法体
}

注意:返回值的类型可以不写,由Scala自动进行类型推断。

image.png

object Main {
 // 定义类
class Customer {
    var name: String = _
    var sex:String = "男"
    def sayHello(msg:String ) = {
      println("msg:", msg)
    }
  }
  def main(args: Array[String]): Unit = {
    val c = new Customer()
    c.sayHello("你好 ")
  }
}

五.成员访问的本质

在本质上和java的set,get类似。 要注意:

1.val定义的变量可以生成 get。可以访问。

2.var定义的变量可以生成 get + set。可以访问 + 修改。

3.使用private修饰的变量,既不可以访问,也不可以修改。

object Main {
    // 定义类
class Customer() {
    **private** var age = 10
  }
  def main(args: Array[String]): Unit = {
    val c = new Customer()
    println(c.age) // 报错
  }
}

六.主构造函数

在scala中,直接在定义类时,补充参数即可。

格式: class 类名([参数列表])

object Main {
 // 定义类
class Customer(var name:String, var:sex:String) {
    def sayHello(msg:String ) = {
      println("msg:", msg)
    }
  }
  def main(args: Array[String]): Unit = {
    val c = new Customer(“小花”,”女”)
    c.sayHello("你好 ")
  }
}

Class 类名(参数列表),参数列表中的变量可以用var|val,也可以不用。

用val或var定义,在类外可以访问

不用val|var定义,在类外不可以访问 内部只读,不可改写

七.辅助构造函数

格式

// 定义类
// 主构造函数
class Customer(var name:String, var:sex:String) {
  var age:Int = 0  
// 辅助构造器
  def this(name: String, sex: String, age: Int){
this(name, sex)  
        this.age = age  
    }  
}

辅助构造器的作用

1.提供多种初始化方式:

辅助构造器允许您为类提供多种初始化选项,使得创建对象时更加灵活。例如,您可以定义一个不需要所有参数的构造器。

2.简化对象创建:

通过定义多个辅助构造器,您可以简化对象的创建过程,避免在主构造器中处理过多的参数。

3.调用主构造器:

辅助构造器可以通过 this 关键字调用主构造器,从而确保所有初始化逻辑都集中在主构造器中。