6.Scala的面向对象

来源:互联网 发布:网易房产数据 北京 编辑:程序博客网 时间:2024/06/18 18:23

类(class)

  1. 一个scala源文件中可以有多个class修饰的类。
  2. 可以使用new关键字实例化对象
  3. 与java不同的是,class中可以传递参数,叫做类参数;它作用于整个类
  • 一个简单的class
class Person(name : String , age : Int){  var pName = name;  private var pAge = age;  def printP(): Unit ={    print("pName:" + pName + " pAge:" + pAge + "\n")  }  def sayHello: Unit ={    println("say Hello !")  }}
  • 调用的地方

可以使用new来创建一个对象,并需要传入类参数。

object Test{  def main(args: Array[String]): Unit = {    usePersonPrint()  }  def usePersonPrint(): Unit ={    var person = new Person("lzl",24)    person.printP  }}

类的继承

  1. 子类复写父类的方法必须使用override(规范要求)
  2. scala只支持单继承
  3. 子类继承父类,可以拥有所有private修饰除外的属性和方法
  • 写一个子类
class Worker(val name: String, val age : Int,sex : Boolean) extends Person(name,age){  override def printP(): Unit = super.printP()  def printByWorker(): Unit ={    val str = if(sex == false){      "女"    }else{      "男"    }    print("pName:" + pName + " pAge:" + age + " 性别:" + str)  }}
  • 调用的地方
def useWorkerPrint(): Unit ={    var worker = new Worker("ll",22,false)    worker.printP()    worker.printByWorker()    worker.sayHello    println("pName = " + worker.pName)  }

伴生对象

  1. class ScalaForCompanion 和 object ScalaForCompanion名必须一致
  2. object ScalaForCompanion叫做class ScalaForCompanion的伴生对象
  3. class ScalaForCompanion叫做object ScalaForCompanion的伴生类
  4. 伴生对象可以访问类的私有属性和方法
  5. 伴生对象中的apply用来创建出类的实例,可以设置不同的构造函数
class ScalaForCompanion private(name : String) {  private val sex : Boolean = false  private val age : Int = 2  private def convertBySex(boolean: Boolean): String ={    var sexStr = "女"    if (boolean == true){      sexStr = "男"    }    sexStr  }  override def toString: String = {    val str = "name: " + name + " age:" + age + " sex:" + convertBySex(sex)    str  }}object ScalaForCompanion{  val forCompanion = ScalaForCompanion  /**    *    * @param name    * @return    */  def apply(name: String): ScalaForCompanion = new ScalaForCompanion(name)  def apply(name: String,age:Int): ScalaForCompanion ={    val scalaForCom = new ScalaForCompanion(name)    //可以访问到私有的变量    val scalaForCom.age = age    scalaForCom  }  def getInfo(name:String ,sex:Boolean): String ={    val scalaForCom = apply(name)    //可以访问私有方法    val sexs = scalaForCom.convertBySex(sex)    val info = "name = " + name + " sex = " + sexs    info  }  def main(args: Array[String]): Unit = {    //使用伴生对象    print(getInfo("lll",true))  }}
  • 使用伴生对象创建对象
 val scalaForCompanion = ScalaForCompanion.apply("lzl")    print(scalaForCompanion)

Trait

  1. trait 支持多重继承,使用extends和with的方式
  2. 可以定义属性和方法的实现
  3. scala的类支持单继承,trait可以继承多个。
  • trait可以定义属性和方法的实现
trait ScalaForTrait {  /**    * 抽象的方法,返回字符串是否相等    * @param name    * @return    */  def isStr(name: Any) : Boolean  /**    * 具体方法。    * @param name    * @return    */  def isNotStr(name: Any): Boolean = !isStr(name)}class InstanceScalaTrait(str : String) extends ScalaForTrait{  override def isStr(obj: Any): Boolean = {    obj.equals(str)  }}
  • trait 支持多重继承,使用extends和with的方式
trait Logging{  def log(log : String): Unit ={    print("logging is:" + log + "\n")  }}trait SystemLogging extends Logging{  override def log(log: String): Unit = {    print("system loggin is:" + log + "\n")  }}/**  * 使用extends...with表示  * @param name  * @param date  */class userOperation(name : String,date : String) extends Logging with SystemLogging{  def sysUserSave(name : String): Unit ={    val str = name + " 用户保存成功! 时间:" + date    //写入log,默认使用的是SystemLogging.log方法    log(str)  }}object userOperation{  def apply(): userOperation = {    apply("")  }  def apply(name: String): userOperation = {    import java.util.Date    val date : Date = new Date()    var simpleDate : SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd mm:ss")    val dateStr = simpleDate.format(date)    apply(name,dateStr)  }  def apply(name: String, date: String): userOperation = new userOperation(name, date)  def main(args: Array[String]): Unit = {    var useroperation = apply()    useroperation.sysUserSave("lzl")  }}
原创粉丝点击