菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
245
0

scala类

原创
05/13 14:22
阅读数 67889

object是静态的,只能做一次加载,调用时,不需要进行new

class 类需要做new 新的对象,通过对象进行方法和属性调用
trait 类是接口

1、与java类型,class 类里面有变量(类内部声明变量需要声明类型和占位符,或者初始化默认值;在类名后边进行变量定义只需要声明类型)

package com.cslc.day1
/*
* 面向对象
* 类的定义与使用
* 构造器
* 继承与重写
* 抽象类
* 伴生类和伴生对象
* apply
* case class
* trait  (接口)
* */

object FaceClass {

  def main(args: Array[String]): Unit = {
    val people =new People
    people.name="meissi"
    people.age=31
    println(people.eat())
    println(people.watchfoobal("CBA"))
    people.printInfo()
  }
}


class People{
  //属性
  var name:String=_
  var age:Int=_

  private  [this] val gender="male"
  def printInfo():Unit={
  println("gender is  " + gender)
  }
  def eat(): String ={
    name +" is eating"
  }
  def watchfoobal(teamname:String): String ={
    name +" is watching " +teamname+" games"
  }
}
View Code

 

 

2、构造器与附属构造器

package com.cslc.day1

object ConstructorApp {
  def main(args: Array[String]): Unit = {
    val people=new Person("messi",31)
    println(people.name+" "+people.school)
    val person2=new Person(name = "cluo",age = 33,"M")
    println(person2.name+":",person2.age+":"+person2.gender)
  }

}

//主构造器
class  Person(val name:String,val age:Int){
  println("person Constructor enter...")
  val school ="ustc"
  var gender:String = _

  println("person structor is leaving")
  //附属构造器
  def this(name:String,age:Int,gender:String){
    this(name,age)//附属构造器第一行需要调用主构造器或者其他附属构造器
    this.gender = gender
  }
}
View Code

 

 

 

3、类的继承与变量重写

package com.cslc.day1

object jichen {
  def main(args: Array[String]): Unit = {
    val s1=new Student("liu",18,"bioinformation")
    println(s1.major)
    println(s1.school)
  }
}
//继承Person类,重写变量
class  Student(name:String,age:Int,val major:String) extends Person(name,age){
  println("student is entr......")
  override val school= "dlut"
  println("student is leaving")
}
View Code

 

 

 

4、抽象类:方法和或者变量只进行了定义没有进行实现,继承抽象类需要完善方法或者变量

 


 

 

 

 

 

 

 5、case class 通用与模式匹配,使用case class 定义的类不需要进行new

package com.cslc.day1

object CaseClassApp {
  def main(args: Array[String]): Unit = {
    print(Dog("wangcai",13).age)
  }
}
case class Dog(name:String,age:Int)

//通常用于模式匹配
View Code

 

6、伴生类与伴生对象,类名一样,伴生对象直接调用,他是静态的,只能调用一次,默认会调用方法object.apply() ,伴生类需要new 实例,实例()时候,会调用class.apply()

最佳实践:在伴生对象的apply方法中,声明new 伴生类的实例。

package com.cslc.day1

object ApplyApp {
  def main(args: Array[String]): Unit = {
    for (i <- 1.to(10)) {
      ApplyTest.incr
    }
    println(ApplyTest.count)
    val b=ApplyTest()  //使用伴生类或者伴生对象加() ,默认使用object.apply()
    val c=new ApplyTest()   //进入class
    c()  //调用class。apply
  }
}
/*
*
*
* class 名和object 名称相同,则:伴生对象和伴生类
* object是一个单例,默认调用object
*
* object()  调用object.apply()
*class new 对象t t() 调用class.apply()
*
*
* 最佳实践:object中的apply中new 一个 class对象
* */
class ApplyTest{
  println("class is enter ....")
  println("class is leaving....")

  def apply(): Unit ={
    println("class.apply is entering")
  }
}
object  ApplyTest{
  println("object is enter ......")
  var count=0
  def incr():Unit ={
      count+=1

  }
  println("object is leaving")


  def apply()={
    println("print object.apply is enter ...")

  }
}
View Code

 

发表评论

0/200
245 点赞
0 评论
收藏