Scala中的类和对象

64 阅读2分钟

一.面向对象

1.面向过程(c) ---> 面向对象(java/scala)

  • 过程:步骤
  • 对象:模块
  1. 面向对象的三大思想特点
  • 符合人们思考习惯
  • 复杂简单化
  • 从执行者变成指挥者
  1. 类scala
  • 类是属性和行为的集合

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

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

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

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

(1) 封装

(2) 继承

(3) 多态

二.创建类和对象

  1. Person就是一个类名,理解为变量名
  • 首字符为大写
  • 类名一般来说是名词
 class Person(){}  /--定义类

def main(args: Array[String]): Unit = {
  val p1 = new Person()  /--实例话对象
  val s1 = new Person()  /--实例话对象
  println(p1)
  println(s1)
  1. var与val定义变量的区别
  • var 可修改
  • val 不可修改
 class Student() {
   var name:String = "小花"
   var age:Int = 12
 }
def main(args: Array[String]): Unit = {
  val p1 = new Person()
  val s1 = new Student()
  // 访问成员变量
  println(s1.name)
  //修改成员变量
  s1.name = "小花花"
  println(s1.name)
  1. 把功能都封装在class中
  • 1.shuxing
  • 2.方法
  • 3.辅助构造器
 class Person(){}
 class Student() {
   //1.类的属性--变量
   var name:String = "小花"
   var age:Int = 12
   //2.类的方法--函数
   def say(): Unit = {
     println(s"${name},${age}")
   }
 }
def main(args: Array[String]): Unit = {
  val s1 = new Student()
  s1.say()
 class Student(var name:String = "小花",var age:Int = 12 ) {
   println("Student.......被调用了......")
   //2.类的方法--函数
   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()

[习题一] 封装一个三角形类

  • 求三角形的面积
  • 判断是否是一个三角形
  class Triangle(var a:Double = 1.0, b:Double = 1.0 , c:Double = 1.0 ) {
     //检查是否构成三角形
     def check(): Boolean = {
        return a+b > c && a+c > b && c+b > a
      }
      //计算面积
     def getArea():Double = {
       if(check()){
         var s = (a+b+c)/2
         s = Math.sqrt( s*(s-a)*(s-b)*(s-c))
         s
       }else{
         println(s"${a} ${b} ${c} 不能构成一个三角形")
         -1
       }
     }
  }
  def main(args: Array[String]): Unit = {
    val t1 = new Triangle(3,4,7)
    println(t1.getArea())
    val t2 = new Triangle(3,4,3)
    println(t2.getArea())
  }
}

三.构造器

  1. 默认值类型
  • 必填项:姓名,年龄
  • 有默认值的项:性别-男,民族-汉

[习题二] 输出一个人的姓名,年龄,民族,性别

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 = {
var s1= new Student("小明",19)
s1.say()

var s2= new Student("小美",23,"女","回族")
s2.say()
}
  1. 构造器中的参数类型
  • val定义的属性,不能修改
  • var定义的属性,可以修改
  • 没有val,也没有var的,不是对象的属性,不能使用语法来访问
class Student(var name:String,var age:Int, var gender:String="男") {
  def say(): Unit={
    println(s"${name},${age},${gender}")
  }
}
def main(args: Array[String]): Unit = {
var s1= new Student("小明",19)
s1.age = 23
s1.say()