Scala语法(二)
(1)类,对象
- //定义类(属性、方法),实例化对象
class counter{ *//主构造器 class counter(name:String,mode:Int){ ... } 实例化:val mycoun = new counter("mycoun",3)
private var privatevalue = 0
private var name = " "
private var mode = 1
def value = privatevalue
def value_ = (newvalue:Int){
if(newvalue >0) privatevalue = newvalue
} *//value、value_方法定义了getter,setter
def this(name:String){
this()
this.name = name
} *//第一个辅助构造器(用于实例化时参数的个数)
def this(name:String,mode:Int){
this(name)
this.mode = mode
} *//第二个辅助构造器
def increment(step:Int): Unit = {value+=step} *//函数参数step
def current(): Int = { value}
}
object Mycounter{ * //声明放在对象中进行编译 (不编译运行不用放入)
def main (args:Array[String]){
val mycounter = new counter() //实例化对象
val coun1 = new counter("coun1") * //第一个辅助构造器实例化
val coun2 = new counter("coun2",2) * //第二个辅助构造器实例化
print(mycounter.value) //getter
mycounter.value = 3 //setter
mycouter.increment(1) // 调用函数
println(mycounter.currrent())
}
文件名Test.scala
运行:scalac Test.scala // 编译
scala -classpath .Mycounter
单例对象:(类似java静态方法)
class person{ *//编译后类, 里面的成员变为实例成员
private var id = person.newpersonid() *//类和它的伴生对象的私有字段和方法可以相互调用(必须存在于同一个文件中)
private var name = " "
def this(name:String){
this()
this.name = name
}
def info() {
println(id,name)
}
}
object person{ * //单例对象object,构造类似class //编译后伴生对象,成为静态成员 public static int newpersonid()*
private var lastid = 0
def newpersonid() = {
lastid+=1
lastid
}
def main(args:Array[String]){ * //应用程序对象(程序从此运行)
val person1 = new person("大刘") *//调用了person类的apply方法
val person2 = new person("小刘")
person1.info()
person2.info()
}
}
对象的apply,update方法
var myarr = Array("hadoop","spark") *//调用了Array类的apply方法
var myarr = new Array[String](3)
myarr(0) = "me" myarr(1)= "you" myarr(2) = "they" *//调用了Array类的update方法(使用了括号,实际上执行了myarr.update(0,"me"))
(2) 继承
抽象类
abstrate class Car{ * //抽象类
val carband:String * //抽象字段
def info() * //抽象方法
def greeting() {
println("welcome")
}
}
class BWM extends Car{
override val carband = "BWM" * //重写超类的字段需要使用override
def info() {printf("this is a %s car",carband)} * //重写超类的抽象函数,不必使用override
override def greeting() {
println("welcome to BWM") * //重写超类的非抽象函数,不必使用override
}
object Mycar{
def main(args:Array[String]){
val car = new BWM()
car.info()
car.greeting()
}
}
特质(trait)类似java中的接口,可实现多重继承
trait Car{
var id:Int * //抽象字段
def currid():Int * // 抽象方法
}
trait Greet{
def greeting(para:String){
println("welcome to "+para)
} * //非抽象方法
class BWM entends Car with Greet{ * //多重继承
override var id = 1000
def currid():Int = {
id+=1;id
}
}
object Mycar{
def main(args:Array[String]){
val car1 = new BWM()
car1.currid()
car1.greeting("BWM")
}
}
Scala语法(二)的更多相关文章
- PHP语法(二):数据类型、运算符和函数
相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 这次整理了PHP的数据类型.运算符和函数. ...
- Python 基础语法(二)
Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- scala语法在spark withScope上的应用
withSpout在spark中是用来做DAG可视化的,它在代码里的用法如下(以map为例,spark 2.0.0版本) def map[U: ClassTag](f: T => U): RDD ...
- CodeSmith 基本语法(二)
CodeSmith之四 - 典型实例(四) CodeSmith API文档 (三) CodeSmith 基本语法(二) CodeSmith 图形界面基本操作(一) CodeSmith的C#语法与Asp ...
- scala语法解析(解码指环)
看惯了JAVA的语法,再看scala的语法,有的晦涩难懂.正好遇到一个介绍scala语法的文章,就直接截图留念.省的再临时抱佛脚了.
- Pocket英语语法---二、指示代词和不定代词是什么
Pocket英语语法---二.指示代词和不定代词是什么 一.总结 一句话总结: 指示代词:标识人或事物的代词,用来代替前面已提到过的名词 this.these.that.those不定代词:指代不确定 ...
- Vue模板语法(二)
Vue模板语法(二) 样式绑定 class绑定 使用方式:v-bind:class="expression" expression的类型:字符串.数组.对象 1.2 style绑 ...
- Shell系列(36)- for循环语法二简介及批量添加删除用户
for循环语法二 for ((初始值;循环控制条件;变量变化)) do 程序 done 例子 例子-1 求和工具 需求:根据用户输入的数字,求1~输入所有数字的和 脚本: #!/bin/bash re ...
随机推荐
- python 按值排序
转自:http://www.cnpythoner.com/post/266.html,感谢分享! python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需 ...
- VueJs - 世界地图(根据返回国家value值的大小来展示颜色的深浅分布)
一.实现功能 1.画出世界各国的世界地图 2.根据返回name->国家全称.value->数量,渲染对比世界各国成功的国家,予以值域范围的高亮 3.滑入国家地图,出现tooltip框,提示 ...
- 关于APIT定位算法的讨论
关于APIT定位算法的讨论 [摘要] 无线传感器网络节点定位机制的研究中,基于距离无关的定位技术得到快速发展,其中基于重叠区域的APIT定位技术在实际环境中的定位精度高,被广泛研究和应用. [关键 ...
- react中PropTypes与DefaultProps的应用
每个组件都有自己的props参数,这参数是从父组件接收的一些属性,那么如何对参数的类型作校验.如何定义参数的默认值.这里涉及到两个基础的概念,叫做proptypes 和 defaultprops.子组 ...
- POJ 2195 Going Home 【二分图最小权值匹配】
传送门:http://poj.org/problem?id=2195 Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- 【luogu P3390 矩阵快速幂】 模板
题目链接:https://www.luogu.org/problemnew/show/P3390 首先要明白矩阵乘法是什么 对于矩阵A m*p 与 B p*n 的矩阵 得到C m*n 的矩阵 矩阵 ...
- c# 后台线程 访问前台控件并显示信息
//设置为后台线程 Thread th = new Thread(delegate() { append(); }); th.IsBackground = true; th.Start(); //在a ...
- JS高阶函数与函数柯里化
高阶函数 满足下列条件之一的函数: 函数作为参数被传递(如回调函数): 函数可以作为返回值输出: 一些内置高阶函数的例子: Array.prototype.map map()方法通过调用对输入数组中的 ...
- element 表单的input循环生成,并可单个input失去焦点单个验证并保存; (多个表单实例)
<div class="box_item"> <el-form ref="aList" :model="form" :ru ...
- redis的安装和启动linux环境
启动客户端连接redis服务,redis-cli -p(端口) -h(登录的服务的ip地址);不添加任何参数和选项直接使用redis-cli将会默认登录6379,默认使用ip 127.0.0.1#re ...