Scala类和对象

一、Scala类和对象

类是对象的抽象,对象是类的具体实例。类是抽象的,不占用内存,二对象是具体的,占用存储空间,new出来的对象,都在堆当中。
类与对象举例:手机在制作之前肯定是需要一张图纸的,那么那张图纸就是类,一个手机图纸,在不同的商家甚至是统一商家,可以造出不同的手机。
案例演示:

class Student(name:String,age:Int,sex:String) {
  var names:String=name
  var ages:Int=age
  var sexs:String=sex

  def study(name:String,age:Int)={
    println(ages+"的"+names+"正在看书")
  }
}

二、scala继承

scala继承一个基类跟java很相似,但是有些不同:

  1. 重写一个非抽象方法必须使用override修饰符
  2. 只有主构造函数才可以往基类的构造函数里写参数。
  3. 在子类中重写父类方法时,你需要使用override关键字
    案例演示:
class Student(name:String,age:Int,sex:String) {
  var names:String=name
  var ages:Int=age
  var sexs:String=sex

  def study(name:String,age:Int)={
    println(ages+"的"+names+"正在看书")
  }
}

class manStudent(name:String,age:Int,sex:String) extends Student(name:String,age:Int,sex:String){
   override def study(name: String, age: Int): Unit ={
     println(age+"的,姓名为:"+name+"的男孩正在打篮球")
  }
}

三、scala单例对象

在scala中没有static这个东西,但是也不能造成功能缺失,scala为我们提供了单例模式的实现方法,那就是使用关键字object。
Scala中使用单例模式的时候,不仅要定义类,还要定义同名的object对象,object对象和类的区别是,他不能带有参数。class类带有的参数,和java中的构造函数类似。
当单例对象和莫各类同一个名称的时候,会被称作为半生对象(companion object)。但是秋安提条件是这两个东西得是在同一个类中。
案例演示:

class Student(name:String,age:Int,sex:String) {
  var names:String=name
  var ages:Int=age
  var sexs:String=sex

  def study(name:String,age:Int)={
    println(ages+"的"+names+"正在看书")
  }
}

object Test{
  def main(args: Array[String]): Unit = {
    val student=new Student("lyq",22,"male")
    def func={
      println(student.names)
      println(student.ages)
    }
    func
  }
}

四、半生对象

半生对象就是前文中介绍的,同一个类中的class类和object类名字一样,那么object就成为半生对象,半生对象的好处就是创建对象的时候,不用在去new对象,之前创建就可以。
案例演示:

class Person(uname:String,uage:Int) {
  println("!!!!!!!!!!!!!!!!Person!!!!!!!!!!!!!!!!!!")
  var name=uname
  var age=uage
  var gender=""
  println("##############Person##################")

  def this(name:String){
    this(name,18)
    println("@@@@@@@@@@@@@@@Person@@@@@@@@@@@@@@@@")
  }

  def this(name:String,age:Int,ugender:String){
    this(name,18)
    gender=ugender
  }

  def printMsg():Unit={
    println(name,age)
  }
}

object Person{
  println("&&&&&&&&&&& Object Person &&&&&&&&&&&&&&")

  var address:String="JiangSu nanjing"

  def apply(uname: String, uage: Int): Unit={println(uname,uage)}

  def apply(uname: String, uage: Int,gender:String): Person = new Person(uname, uage,gender)

  def apply(uname: String): Person = new Person(uname)

  def main(args: Array[String]): Unit = {
    val person=new Person("zs",21)
    val person2=Person("zs")
    val person3=Person("zs",21,"男")
  }
}

五、样例类

样例类是用case修饰的类,可以用于匹配模式
案例演示:

case class ClassName(name:String,age:Int)

object MatchTest{
  def main(args: Array[String]): Unit = {
  //创建不同的对象
    val kb07 = new ClassName("kb07",4)
    val kb05 = new ClassName("kb05",8)
    val kb02 = new ClassName("kb02",14)
    val list = List(kb07,kb05,kb02)

//用for循环match去匹配输出不同的值。只有用了case的类才能进行匹配
    for(classname <- list){
      classname match {
        case ClassName("kb07",4)=>println("kb07")
        case ClassName("kb05",8)=>println("kb05")
        case ClassName(name,age)=>
          println("name:"+name," age:"+age)
      }
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值