scala学习笔记(8)
1.scala:java语言脚本化
2.object //静态成员
3.class //class
4.trait //接口
5.def xxx(a:Int):Unit={} //函数的定义,函数有=号
6.def xxx(a:Int):Unit{} //定义过程
7.val //常量
8.var //变量
9.(1,2,3,4,5,6) //元组,元组的最高维数是22维
10.for(x<- 1 to 10 if xxxxxx)... yield //if.......是守卫生成条件,yield是生成数组的方式
11.数组的定义:new Array(100) //定义100个为Null的元素
12.Array(100) //定义一个元素,值是100 ,这是apply()的一个调用
13."hello"(1) //charAt(),这是进行定位元素的意思
14.object //单例对象,里面放的是静态成员
15.companions object //和类同名,必须定义在一个scala文件中
16.package object //package.class
17.class Person(.........){//主构造函数
def this(..........){//辅助构造函数
this(); //先调用主构造
}
}
18.扩展类
Scala扩展的方式和java一样,使用extends关键字,和java一样,需要给出子类需要而超类没有的字段和方法,或者重写剿劣的方法。可以将类声明成final,这样它就不能被扩展。可以将单个的方法或者字段声明成final,以确保他们不被重写。
class Employee extends Person{
var salary =0.0
....
}
class Dog extends Animal{ ........... }
19.重写方法。在scala中重写一个非抽象方法需要使用override修饰符。例如
public class Person{
.............
override def toString=getClass.getName+"[name="+"name]"
}
20.扩展
------------------------------------------
class Dog extends Animal{
//重写
//overload
override def run()={...................}
}
20.类型检查和转换
------------------------------------
(1)检查某个对象是否属于某个给定的类,可以用isInstanceOf()方法。如果测试成功,可以用asInstanceOf()方法将引用转换为子类的引用。
if(p.isInstanceOf[Employee]){
val s = p.asInstanceOf(Employee) //s的类型为Employee
...............
} //如果p指向的是Employee类及其子类的对象,则p.isInstanceOf[Employee]就会成功
//如果p是null,则p.isInstanceOf[Employee]就会返回false,并且p.asInstanceOf[Employee]结果会返回null
//如果p不是一个Employee,则p.asInstanceOf[Employee]就会抛出异常
class Animal{} //定义超类 class Dog extends Animal{} //定义子类 val d = new Dog() d.isInstanceOf[Animal]
val a = d.asInstanceOf[Animal] //将d转换为Animal类型的对象,将数据类型强制转换为
//得到对象的类
$scala>val a = d.asInstanceOf[Animal] ===>得到java中的类
$scala>d.getClass = classOf[Dog] =======>判断类是不是同一个类,这样的匹配方式是精确匹配
21.超类构造器
--------------------------------
类有一个主构造器和任意数量的辅助构造器,而每一个辅助构造器都必须对先前定义的辅助构造器或者主构造器调用开始。
这样做带来的后果是,辅助构造器永远不可能直接调用超类的构造器。
子类构造器最终会调用主构造器,只有主构造器可以调用超类构造器。
主构造器是和类定义交织在一起的,调用 超类构造器的方式同样交织在一起。
class Employee(name :String,age :Int,val salary:Double) extends Person(name,age) //这个地方Employee类有三个参数:name,age和salary,其中两个参数被传递到了超类。
//定义类的继承
scala>class Animal(val name:String){}
scala>class Dog(name:String,val age:Int) extends Animal(name){}
22.抽象类
----------------------------
scala>abstract class Animal(val name:String){
val id:Int ; //抽象字段,没有被初始化的字段
def run(); //抽象方法,没有方法体,不需要抽象关键字定义修饰
23.scala类型的层级
------------------------------------------
1.与Java中基本类型相应的类,以及Unit类型,都扩展自AnyVal类型
2.AnyVal(值类型)和AnyRef(应用类型)都是继承自Any类;Int,Boolean以及Unit都是继承自AnyVal