类和变量

31 阅读3分钟
//Person是一个类名 理解为变量名
//首字符是大写
//类名一般是名词

1 定义变量

//在类中 定义成员变量
//val var修饰的变量有啥区别?
//val不可修改
//var 可修改

2 实例化对象

//访问成员变量
println(s1.name)
//修改成员变量
s1.name = "小花花"
println(s1.name)
object Base30 {
  class Person() {}

  class Student() {

    //在类中 定义成员变量
    //val var修饰的变量有啥区别?
    //val不可修改
    //var 可修改
    var name: String = "小花"
    var age: Int = 18
  }
    def main(args: Array[String]): Unit = {
      //2 实例化对象
      val p1 = new Person()
      val s1 = new Student()
      //访问成员变量
      println(s1.name)
      //修改成员变量
      s1.name = "小花花"
      println(s1.name)
    }
}

功能都封装在class中

object Base31 {
  //功能都封装在class中
  //1 属性
  //2 方法
  //3 辅助构造器
  class Student() {
    //1 类的属性- 变量
    var name:String = "小花"
    var age :Int = 18
    //2 类的方法-函数
    def say(): Unit = {
      println(s"${name},${age}")
    }
  }

  def main(args: Array[String]): Unit = {
    //实例化对象
    val s1 = new Student()
    s1.say()
  }
}

带参数的构造器(构造函数) 功能都封装在class中 1 属性 2 方法 3 辅助构造器

object Base32 {
  //带参数的构造器(构造函数)
  //那功能都封装在class中
  //1 属性
  //2 方法
  //3 辅助构造器
  class Student(var name:String = "小花",var age :Int = 18) {
    println("Student......被调用了....")
    //1 类的属性- 变量
    //var name:String = "小花"
    //var age :Int = 18
    //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()
  }
}
object Base33 {
  //封装一个三角形类
  //给中学生用,根据三条边
  //1 求三角形面积
  //2 判断是否为一个三角形

  def main(args: Array[String]): Unit = {
    class Triangle(var a:Double = 1.0,var b:Double = 1.0,var c:Double = 1.0) {
      println(s"${a}${c}${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("不能构成三角形")
      }
    }
  }
}
object Base34 {
  //封装一个三角形类
  //给中学生用,根据三条边
  //1 求三角形面积
  //2 判断是否为一个三角形

    class Triangle(var a:Double = 1.0,var b:Double = 1.0,var c:Double = 1.0) {
//      println(s"${a}${c}${c}")
      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}${c}${b} 不能构成一个三角形")
          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()
//      val t1 = 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())
//      if (t1.check()) {
//        println("能构成三角形")
//      } else {
//        println("不能构成三角形")
      }
}
object Base35 {
  //构造器的默认值
  //必填项:姓名,年龄
  //有默认值的项
  //性别:男
  //民族:汉族

  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 s0 = new Student()//gender 和 nav 使用默认值
    var s1 = new Student("小明", 19)//gender 和 nav 使用默认值
    s1.say()
    var s2 = new Student("小花", 18, "女", "回族")
    s2.say()
  }
}
object Base36 {
  //构造器中的参数的类型
  //1 val定义的属性,不能修改
  //2 var定义的属性,可以修改
  //3 没有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 s0 = new Student()//gender 和 nav 使用默认值
    var s1 = new Student("小明", 19)//gender 和 nav 使用默认值
    s1.age=20
    s1.say()
  }
}
object Base38 {
  // 多种注册用户的方式 --- 辅助构造器
  // 1. 手机号 + 密码
  // 2. 邮箱 + 密码 + 用户名
  // 姓名
  class Register(val name: String, var email: String, var pwd: String, var phone: String) {

    println("主构造器被调用")
    // 辅助构造器
    // 1. 名称一定是this
    // 2. 在辅助构造器内部,一定要调用主构造器this
    // 3. 可以有多个
    def this(phone: String, pwd: String) {
      this("随机用户xxxxx", "xxxx@qq.com", pwd, phone) // 调用主构造器
      println("辅助构造器被调用")
    }

    def this(email: String, pwd: String, name: String) {
      this(name, email, pwd, "13600000000") // 调用主构造器
      println("辅助构造器被调用")
    }

    def say(): Unit = {
      println(s"姓名: ${name}, 邮箱: ${email}, 密码: ${pwd}, 手机号: ${phone}")
    }
  }

  def main(args: Array[String]): Unit = {
    // val r1 = new Register("小明", "123123@qq.com", "123456", "13617885566")
    // 调用辅助构造器
    val r1 = new Register("13617885566", "123456")
    val r2 = new Register("9456651@qq.com", "123456", "小明")

    r1.say()
    r2.say()
  }
}