6.Scala的面向对象
来源:互联网 发布:网易房产数据 北京 编辑:程序博客网 时间:2024/06/18 18:23
类(class)
- 一个scala源文件中可以有多个class修饰的类。
- 可以使用new关键字实例化对象
- 与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 }}
类的继承
- 子类复写父类的方法必须使用override(规范要求)
- scala只支持单继承
- 子类继承父类,可以拥有所有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) }
伴生对象
- class ScalaForCompanion 和 object ScalaForCompanion名必须一致
- object ScalaForCompanion叫做class ScalaForCompanion的伴生对象
- class ScalaForCompanion叫做object ScalaForCompanion的伴生类
- 伴生对象可以访问类的私有属性和方法
- 伴生对象中的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
- trait 支持多重继承,使用extends和with的方式
- 可以定义属性和方法的实现
- 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") }}
阅读全文
0 0
- 6.Scala的面向对象
- Scala的面向对象
- Scala的面向对象
- Scala-面向对象的函数编程
- Scala 的面向对象编程基础
- Scala 的面向对象编程实践(一)
- Scala 的面向对象编程实践(二)
- Scala 的面向对象编程实践(三)
- Scala面向对象的一部分内容
- Scala面向对象
- Scala面向对象学习
- Scala面向对象
- Scala面向对象
- scala面向对象
- Scala 面向对象编程
- 5.Scala面向对象
- scala面向对象编程
- Scala面向对象编程
- Java Socket编程
- python
- java语言程序设计 第十三章 (13.9、13.10、13.11、13.12)
- Trapping Rain Water
- 设置vim(CentOS)
- 6.Scala的面向对象
- Java中Scanner的使用
- Python 小技巧:去掉字符串首尾附带的标点符号
- struts2使用注解替代struts.xml配置文件
- JVM之虚拟机内存监控与故障处理工具
- httpClient4发送gzip的post数据,servlet接收并解压
- opencv 学习之 转置翻转(90/180/270)
- Residual Networks
- 设计模式-责任链模式