(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语法(二)的更多相关文章

  1. PHP语法(二):数据类型、运算符和函数

    相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 这次整理了PHP的数据类型.运算符和函数. ...

  2. Python 基础语法(二)

    Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...

  3. web前端学习python之第一章_基础语法(二)

    web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  4. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  5. scala语法在spark withScope上的应用

    withSpout在spark中是用来做DAG可视化的,它在代码里的用法如下(以map为例,spark 2.0.0版本) def map[U: ClassTag](f: T => U): RDD ...

  6. CodeSmith 基本语法(二)

    CodeSmith之四 - 典型实例(四) CodeSmith API文档 (三) CodeSmith 基本语法(二) CodeSmith 图形界面基本操作(一) CodeSmith的C#语法与Asp ...

  7. scala语法解析(解码指环)

    看惯了JAVA的语法,再看scala的语法,有的晦涩难懂.正好遇到一个介绍scala语法的文章,就直接截图留念.省的再临时抱佛脚了.

  8. Pocket英语语法---二、指示代词和不定代词是什么

    Pocket英语语法---二.指示代词和不定代词是什么 一.总结 一句话总结: 指示代词:标识人或事物的代词,用来代替前面已提到过的名词 this.these.that.those不定代词:指代不确定 ...

  9. Vue模板语法(二)

    Vue模板语法(二) 样式绑定  class绑定 使用方式:v-bind:class="expression" expression的类型:字符串.数组.对象 1.2 style绑 ...

  10. Shell系列(36)- for循环语法二简介及批量添加删除用户

    for循环语法二 for ((初始值;循环控制条件;变量变化)) do 程序 done 例子 例子-1 求和工具 需求:根据用户输入的数字,求1~输入所有数字的和 脚本: #!/bin/bash re ...

随机推荐

  1. 我的Android开发之路——ListView的使用

    在Android开发过程中,遇到需要列表显示的时候,这时候就会用到listview. 1.首先创建一个ListViewTest项目,选择empty activity类型.修改activity_main ...

  2. 数据库系统异常排查之DMV(转)

    来源: http://www.cnblogs.com/fygh/archive/2012/03/12.html 数据库系统异常是DBA经常要面临的情景,一名有一定从业经验的DBA,都会有自己一套故障排 ...

  3. Selenium2学习(七)-- 定位一组元素find_elements

    前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...

  4. 设计模式——外观模式(FacadePattern)

    外观模式:为子系统中的一组接口提供一个一致的界面,次模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. UML图: 外观类: package com.cnblog.clarck; /** * ...

  5. bootstrap table 主子表 局部数据刷新(刷新子表)

    1.主表中设置data-detail-view="true",启用主子表模式: <table class="table table-striped" wi ...

  6. Android(java)学习笔记18:单例模式

    单例模式代码示例: 1. 单例模式之饿汉式: package cn.itcast_03; public class Student { // 构造私有 private Student() { } // ...

  7. Thread control block & thread

    https://en.wikipedia.org/wiki/Thread_control_block Thread Control Block (TCB) is a data structure in ...

  8. ShellSort uva

    ShellSort He made each turtle stand on another one's back And he piled them all up in a nine-turtle ...

  9. 云盘+Git GUI实现云盘文件版本号控制

    以下介绍操作细节 1.先下载Git GUI 下载地址:http://msysgit.github.io/       再下载百度云网盘 下载地址:http://pan.baidu.com 接下来就是安 ...

  10. Latex 编辑器安装

    MiKTex + TexStudio 1. 下载安装MiKTex,从http://www.miktex.org/下载basic-miktex-2.9.5872-x64.exe,一路默认安装... 或者 ...