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 ...
随机推荐
- JS中的继承方式总结
1. 原型链继承(又称类继承) Child.prototype = new Parent(); function Parent (name, age) { this.name = name; this ...
- SQL Server ->> 生成代码把表字段从NULL改为NOT NULL
一般我们用SELECT .... INTO语句生成的表字段都是允许为NULL.而如果我们需要改成NOT NULL呢 select 'ALTER TABLE dbo.XXXXXXX ALTER COLU ...
- Linux文件寻址算法:逻辑地址到物理地址的转换
题目描述: 编写一个函数实现Linux文件寻址的算法,即读取文件当前位置到物理存储位置的转换函数,需要给出运行的测试数据,可以假设和模拟需要的数据和结构.即编写一个函数unsigned long lt ...
- python入门2 python字符串换行显示、字符串太长\连接多行
#coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...
- 测试笔记:jsonp跨域接口测试
原先测过这个接口,前后端同源(域名,协议,端口相同),开发提供的文档: $.post("http://host/url", { data1: "data1", ...
- Uva 11491 暴力贪心
题意:给一个n长度的整数,删掉 k 个数字,使得剩下的数字最大. 分析:还剩 n-k 个数字,就是在原序列里面,相对顺序不变的情况下,这个n-k个数字组成的数最大. 感觉没有什么特别好的方法策略,看了 ...
- The Child and Zoo 题解
题目描述 Of course our child likes walking in a zoo. The zoo has n areas, that are numbered from 1 to n. ...
- python nmap模块 端口探测
今天添加端口探测功能,主要实现方式是通过nmap模块调用,扫描1-65535端口.上一篇中已经将UP的PC机全部获取到,这里直接从已知在线的PC中进行端口扫描就可以了,会节省很多时间. 代码如下,还是 ...
- 机器学习基础(HGL的机器学习笔记1)
统计学习:统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,统计学习也成为统计机器人学习[1]. 统计学习分类:有监督学习与无监督学习[2]. 统计学习三要素:模型 ...
- Android学习笔记_43_网络通信之文件断点上传
1.建立服务端,用于接收上传的文件.这里使用Socket,文件可能会比较大.采用多线程编程,防止并发. package com.socket.service; import java.io.File; ...