Scala中的类和对象

42 阅读4分钟

内容:

1. Scala 中的类;

2. Scala中的对象;

3. 成员变量和成员方法;

4. 构造函数和辅助构造函数。

面向对象的相关概念

1. 什么是面向对象

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

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

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

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

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

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

(1) 封装

(2) 继承

(3) 多态

一, Scala 中的类;

4. 什么是类class, 类是属性行为的集合。

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

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

二, Scala 中的对象;

创建类和对象

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

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

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

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

object Main {

// 定义类  
class Student{ }  


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

    println("Hello world!")

    // 创建对象

    val p = new Student()

    println(p)

  }
}

 三,成员变量和成员发放

定义和访问成员变量

定义和访问成员变量。

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

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

要求:

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

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

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

步骤

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

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

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

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

object Main {

  // 定义类

  class Student{

    var age: Int = 21

    val name: String = "张三"

  }

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

    println("Hello world!")

    // 创建对象

    val p = new Student()

    println(p.name)

    p.age = 20

    println(p.age)

  }
}

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

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

object xy30 {
  // 私有private
  class Student(var name:String,var age:Int){
    //在方法前面添加 privare,那个方法是私有的,它不能再class的外部被访问
    private def song():Unit = {
      println("我在唱歌...")
    }
    def sayHi():Unit = {
      println(s"我是${name},我今年${age}")
      //私有方法,在类的内部是可以正常调用的
      song()
    }
  }

  def main(args: Array[String]): Unit = {
    val stu3 = new Student("小明",18)
    stu3.sayHi()
    //stu3.song()会报错
  }
}

四,构造函数和辅助构造函数。

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

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

构造函数的参数

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

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

class Student(var name:String,var age:Int) {
  println("构造函数被调用...")
  def sayHi(): Unit = {
    println(s"我是${name},我今年${age}")
  }
  //辅助构造函数
  //他的名字是this
  //它内部的第一句代码就必须是调用 主构造函数 this("无名氏",0)
  def this() = {
    this("无名氏",0)
    println("辅助构造函数1被调用...")
  }
  def this(name:String) = {
    this(name,0)
    println("辅助构造函数2被调用...")
  }
}


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

    //stu1.age = 19
    //调用对象的方法
    //stu.sayHi()

    //这里没有设置参数。它会调用辅助构造函数
    //   val stu2 = new Student()
    //   stu2.sayHi()

    //这里设置了一个参数,它会调用辅助构造函数
    val stu3 = new Student("小明")
    stu3.sayHi()
  }
}

扩展:

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

object Tools {
  val PI = 3.14
  def doubleN(n:Int):Int = {
    n*2
  }
}

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