类和对象

23 阅读3分钟

1. 什么是面向对象?

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

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

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

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

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

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

(1) 封装

(2) 继承

(3) 多态

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

创建类和对象

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

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

// 类是属性的集合
// 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 day48 {
  def main(args: Array[String]): Unit = {
    // 创建一个学生对象
    // val stu1 = new Student("小花", 18)
    // 调用对象的方法
    // stu1.sayHi()

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

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

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

(二)创建类和对象

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

展示需求:

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

讲解步骤:

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

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

object day49 {
    // 私有 private
    class Student(var name: String, var age: Int) {

      // 在方法前面添加 private,那这个方法是私有的,它不能在 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() // 会报错
    }
}

(三)定义和访问成员变量

定义和访问成员变量。

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

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

说明需求 

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

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

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 day50 {
    def main(args: Array[String]): Unit = {
      val rst = Tools.PI * Tools.doubleN(2) // 12.56
      println(s"rst = ${rst}")
    }
}