scala中的类和对象

33 阅读3分钟

一、面向对象的相关概念

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

(1) 封装

(2) 继承

(3) 多态

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

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

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

二、创建类和对象

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

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

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

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

  // 通过 对象.属性名 来访问属性
  st1.sayHello()

  val st2=new Student()
  println(st2.age)

三、定义和访问成员变量

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

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

// 带参数的构造器(构造函数)
class Student(var name:String="小花",var age:Int=18){
  // 方法
  // 定义方法和定义函数一致
  def sayHello(): Unit = {
    println(s"我是${age} 岁的 ${name}")
  }
}

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

  // new Student("小明",19)
  // 1.调用构造器,第5行
  // 2.传入相关参数。

  val st2=new Student("小明",19)
  println(st2.name)
}

四、案例三角形类

1. 求三角形的面积

2. 判断是否是一个三角形.

class Triangle(a: Double, b: Double, c: Double) {
  // 计算面积
  def getArea(): Double = {
    if (check()){
    // 能否根据三条边长,来计算面积?  海伦公式
    var s = (a + b + c) / 2
    s = s * (s - a) * (s - b) * (s - c)
    return Math.sqrt(s) // Math.sqrt(4) ==> 2 就是开平方操作
  }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.getArea()) // 获取面积

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

  val t3=new Triangle(1,2,4)
  println(t3.getArea())

}

五、定义和访问成员方法

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

// 可以在两个地方写属性
// 1.构造器的参数列表
// 2.构造器内部

// 构造器的参数列表:
// 1.val 表示不可以被修改的属性
// 2.var 表示可以被修改的属性
// 3.没有修饰符,不是对象的属性,无法访问
class Triangle(val a:Double,var b:Double,c:Double) {
  val d:Int=1
  val e:Int=2
}
def main(args: Array[String]): Unit = {
  val t=new Triangle(1,2,3)
  t.b=2

  //t.c无法访问
}

六、写多个构造器

object basic29 {
  // 主构造器
  class User(val phone: String, var pwd: String) {
    var email:String=""
    var name:String=""

    //辅构造器
    def this(email:String,name:String,pwd:String){
      // 调用一次主构造器
      this("",pwd)
      // 再对其他的属性赋值
      this.name=name
      this.email=email
    }

    // 辅构造器
    def this(email:String,name:String,pwd:String,phone:String){
      // 调用一次主构造器
      this(phone,pwd)
      // 再对其他的属性赋值
      this.name=name
      this.email=email
    }

    def say():Unit={
      println(s"我的信息如下:")
      println(s"姓名:${name}")
      println(s"手机号:${phone}:")
      println(s"邮箱:${email}")
      println(s"密码:${pwd}")
    }
  }
  def main(args: Array[String]): Unit = {
    var u1=new User("13617891234","123456")
    u1.say()

    var u2=new User("12345@qq.com","小花","123456")
    u2.say()

    var u3=new User("12345@qq.com","小花","123456","1362873082")
    u3.say()
  }

}