scala 的类和对象

41 阅读4分钟

scala 中的类和对象

在Scala中,类(Class)是构建对象的模板,用于定义属性和方法,描述一类事物的共性。例如定义Car类,包含品牌、型号属性和行驶方法。 对象是类的实例,通过new关键字创建,可调用类的方法、访问属性。如val myCar = new Car("Tesla", "Model 3")myCar.drive()即可执行行驶逻辑。 单例对象(以object定义)是特殊的对象,程序中仅一个实例,常用于工具方法定义、程序入口(如object AppEntry extends App)。比如object StringUtils中定义def reverse(s: String): String = s.reverse,调用时直接用StringUtils.reverse("Scala")。 类支持继承、多态等面向对象特性,单例对象则弥补了类需要实例化的限制,二者结合使Scala在面向对象编程中兼具灵活性与实用性,是其核心语法结构之一。

1.面向对象的相关概念

a. 什么是面向对象?

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

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

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

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

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

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

(1) 封装

(2) 继承

(3) 多态

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

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

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

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

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

 

2.创建类和对象

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

[展示需求]

创建一个Person类,并创建它的对象,然后将对象打印到控制台上。

1. 使用IDEA创建一个scala项目,并创建object类。

2. 设置项目名,包名,项目地址。注意不要使用中文,空格,特殊符号作为名字及路径名。

/*
* 类使属性的集合
* Student,构造函数用来创建对象的
* 辅助构建函数,提供多种创建对象的方式
* */

class Student(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("辅助构造函数2正在被调用...")
  }
}


object base57 {
  def main(args: Array[String]): Unit = {
    //创建一个学生对象
    //vsl stu1 = new Student("小花",18)
    //调用对象的方法
    //stu1.sayHi()

    //stu1,age = 19
    //调用对象的方法
    //stu1.sayHi

    //这里没有设置参数,他会调用辅助构造函数
    //val stu2 = new Student()
    //stu2.sayHi()
    val stu3 = new Student("小明")
    stu3.sayHi()
  }
}

结果如下图所示: Snipaste_2025-10-28_10-50-02.png

3.定义和访问成员变量

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

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

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

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

//object 对象
//单例对象,直接使用object来定义。不能用new
//单例对象,只用一个,不能通过new开生成多个,它一般用来存放工具方法,常量...

object Tools {
  val PI = 3.14

  def doubleN(n:Int):Int = {
    n * 2
  }
}




object base60 {
  def main(args: Array[String]): Unit = {
   val rst = Tools.PI * Tools.doubleN(2)
    println(s"rst = ${rst}")
  }
}

4.定义和访问成员方法

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

在scala的类中,使用def定义成员方法。

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

// 方法体

}

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

案例,[讲解需求] 一个名为customer的类,有两个属性,一个方法。

Snipaste_2025-10-28_11-36-56.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("你好 ")

  }

}

5.理解构造器

构造器是一个函数,在new的时候,被自动调用,它的作用是实例化对象。

new Class() 就是在调用构造器,或者叫调用构造函数。

代码如下:

object Main {

    // 定义类

class Customer() {

    println("构造函数被调用")

  }

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

    val c = new Customer()

  }

}

对应着生活中的例子:类就是模具,对象就是这个模具生产的产品。

Snipaste_2025-10-28_11-39-06.png

6.构造函数的参数

[提问]:有没有方法可以直接在定义对象的时候就去给成员赋值?

在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("你好 ")

  }  
}