Scala中的类和对象

46 阅读2分钟

面向对象的相关概念

1. 什么是面向对象?

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

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

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

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

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

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

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

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

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

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

(1) 封装

(2) 继承

(3) 多态

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

创建类和对象

object Base31 {
  
  class Person{}
  class Student{}
  
  def main(args: Array[String]): Unit = {
    val p1=new Person()
    val p2=new Student()
    println(p1)
    println(p2)
  }
}

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

结果:

image.png

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

object Base31 {

  class Person{}
  class Student {
    var name: String = "小花"
    var age: Int = 18
  }
  def main(args: Array[String]): Unit = {
    val p1 = new Person()
    val s1 = new Student()
    println(s1.name)
    s1.name = "小花花"
    println(s1.name)
  }
}

定义和访问成员变量。

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

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

结果

image.png

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

    val s1 = new Student()
    s1.say()
  }

  class Student {
    var name: String = "小花"
    var age: Int = 18

    def say():Unit = {
      println(s"${name},${age}")
    }
  }
}
object Base33 {
  class Student(var name:String="小花", var age:Int=18){
    println("Student......被调用了....")
    def say():Unit = {
    println(s"${name},${age}")
  }
}
  def main(args:Array[String]): Unit = {
    val s1 = new Student()
    s1.say()
    val s2 = new Student("小明",19)
    s2.say()
  }
}
object Base34 {
  class Triangle(var a: Double=1.0,var b: Double=1.0,var c: Double=1.0) {
    println(s"${a} ${b} ${c}")
    def check(): Boolean = {
      return a+b>c && b+c>a && a+c>b
    }
  }

  def main(args:Array[String]): Unit = {
    print("请输入第一条边:")
    val a = scala.io.StdIn.readDouble()
    print("请输入第二条边:")
    val b = scala.io.StdIn.readDouble()
    print("请输入第三条边:")
    val c = scala.io.StdIn.readDouble()
    val t1 =new Triangle(a,b,c) 
    
    if(t1.check()){
      println("能构成三角形")
    } else {
      println("不能构成三角形")
    }
  }
}

构成一个三角形

半周长s=(a+b+c)/2 面积S=根号下(s * (s - a) * (s - b) * (s - c)) 用Math.sqrt表示根号

object Base35 {
  class Triangle(var a: Double = 1.0, var b: Double = 1.0, var c: Double = 1.0) {

    def check(): Boolean = {
      return a + b > c && b + c > a && a + c > b
    }

  def getArea(): Double = {
    if (check()) {
      var s = (a + b + c) / 2
      s = Math.sqrt(s * (s - a) * (s - b) * (s - c))
      return s
    } else {
      println(s"${a} ${b} ${c} 不能构成一个三角形")
      return -1
    }
  }
}
def main(args:Array[String]): Unit = {
  //    print("请输入第一条边:")
  //    val a = scala.io.StdIn.readDouble()
  //    print("请输入第二条边:")
  //    val b = scala.io.StdIn.readDouble()
  //    print("请输入第三条边:")
  //    val c = scala.io.StdIn.readDouble()
  //    new Triangle(a,b,c)
  val t1 = new Triangle(3, 4, 7)
  println(t1.getArea())
  val t2 = new Triangle(3, 4, 3)
  println(t2.getArea())
}
}

(一)定义和访问成员方法

object Base36 {
  class Student(var name: String, var age: Int,var gender:String="男",var nav:String="汉族") {
    def say():Unit={
      println(s"${name} ${age} ${gender} ${nav} ")
    }
  }

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

  val s1 = new Student("小明",19)
  s1.say()

  val s2 = new Student("小花",18,"女","回族")
  s2.say()
}
}
object Base37 {
  // 构造器中的参数的类型
  // 1.val定义的属性,不能修改
  // 2.var定义的属性,可以修改
  // 3.没有val,也没有var的,不是对象的属性。不能使用.语法来访问。
  class Student(val name: String, var age: Int,var gender:String="男") {
    def say():Unit={
      println(s"${name} ${age} ${gender}")
    }
  }

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

  val s1 = new Student("小明",19)
  s1.age=20
  s1.say()
}
}

image.png