Scala中的类和对象

47 阅读2分钟

1.类和对象的基本概念

1.1 类:class。类是属性和行为的集合。

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

    面对对象的三大特征:
    1. 封装
    2. 继承
    3. 多态

2.创建类和对象

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

3.下面是一些基本的例子

  1. 基本结构
object basic19 {
  // 1.定义一个类
  // 类名:首字母大写
  // class 类名(){}
  class Student() {
    //属性
    //定义属性和定义变量一致
    var name:String="小花"
    var age:Int=18

    //方法
    //定义方法和定义函数一样
    def sayHello()={
      println(s"我是${age}岁的${name}")
    }

  }

  // new class会发生什么
  //会调用一次 构造器 代码
  // 构造器 ====class
  // 构造器的作用:生产对象


  def main(args: Array[String]): Unit = {
    //2. 创建对象(实例化对象)
    // 对象名= new 类名()

    val st1=new Student()
    //通过 对象、属性名 来访问地址
    println(st1.name)
    //通过 对象、方法名() 来调用方法
    st1.sayHello()

//    val st2=new Student()
//    println(st2)
  }
}
  1. 案例一(简单输出名字)
object basic20 {
  // 带参数的构造器(构造函数)
  class Student(var name:String="小花",var age:Int=18) {
    //方法
    //定义方法和定义函数一样
    def sayHello()={
      println(s"我是${age}岁的${name}")
    }

  }

  def main(args: Array[String]): Unit = {
    //new Student()
    //1. 调用构造器,第3行。
    //2. 没有传入相关参数,使用默认值
    val st1=new Student()
    println(st1.name)


    //new Student("小明",19)
    //1. 调用构造器,第3行
    //2. 传入相关参数
    val st2=new Student("小明",19)
    println(st2.name)

//    val st2=new Student()
//    println(st2)
  }
}
  1. 案例二(求三角形的面积)
object basic21 {

  //面向对象编程的三个特点
  //封装,继承,多态
  class Triangle(a:Double,b:Double,c:Double) {
    //计算面积
    def getAera():Double={
      if(check()){
        //能否根据三条边长,来计算面积?
        var s=(a+b+c)/2
        s=s*(s-a)*(s-b)*(s-c)
        return Math.sqrt(s)
      } else{
        print("不能构成三角形")
        return 0
      }
    }
    // 检查是否能构成三角形
    def check():Boolean={
      //任意两边之和大于第三边
      return (a+b)>c && (a+c)>b && (b+c)>a
    }
  }

  def main(args: Array[String]): Unit = {
    //Triangle表示一个三角形
    //Triangle(边长1,边长2,边长3)
    val t1=new Triangle(3,4,5)
    println(t1.getAera())  //获取面积

    val t2=new Triangle(4,4,4)
    println(t2.getAera())  //获取面积

    val t3=new Triangle(1,1,4)
    println(t3.getAera())  //获取面积
  }
}