Scala的面向对象

1 类的定义

eg. class Point(val x:Int, val y:Int) 
(1)首先是关键字
(2)其后是类名Point
(3)类名之后的括号中是构造函数的参数列表,这里相当于定义了对象的两个常量(变量用var定义)。其名称分别为int,类型为Int。

2 Scala对象的构造函数

2.1 只是初始化字段的构造函数
eg. class Point (val x:Int, val y:Int) {   
val isOriginal:Boolean = {     
x == 0 && y == 0   
    } 
上述代码中的isOriginal后面花括号内的内容是构造函数

2.2 通过this定义的scala构造函数
eg. class Point (val x:Int, val y:Int) {   
val isOriginal:Boolean = {     
x == 0 && y == 0   
}    
def this(xArg:Int) {     
println("hello, I'm this constructor")     
this(xArg,0)   
    } 
如上述代码定义了一个只有一个参数的构造函数,这个构造函数调用了默认的构造函数,传了xArg,和0值。这样写的构造函数可以做初始化字段之外的事情。构造函数之间是可以通过this(...)相互调用的。

3 Scala的继承

3.1 extends实现继承

3.2 重写基类的方法
用override关键字来表示重写,这个关键字时必须的,否则编译器会报错。这一点和Java中有所不同。

4特质(Trait)  

Scala的特质类似于Java中的接口作用,可以在类或实例中混入(Mixin)这些特质。实际上,特质最终会被编译成Java的接口及相应的实现类。
Scala的特质提供的特性远比Java的接口灵活。trait支持部分实现,也就是说可以在scala中的trait中可以实现部分方法。 
(1)Trait和抽象类的区别在于抽象类是对一个继承链的,类和类之前确实有父子类的继承关系,而trait则如其名字,表示一种特征,可以多继承。 
(2)用with来继承Trait。 
(3)如果Trait中没有抽象方法,显然它是可以实例化的。否则,只能with实现它后,才能实例化

5 抽象类(abstract) 

(1)抽象类最大的特征是不能直接实例化。
(2)用extends继承。

6 伴生对象和伴生类 

伴生对象和伴生类在Scala的面向对象编程方法中占据及其重要的位置。例如Scala中许多工具方法都是由伴生对象提供的。 
(1)伴生对象首先是一个单例对象,单例对象用关键字object定义。在Scala中,单例对象分为两种,一种是并未自动关联到特定类上的单例对象,称为独立对象(Standalone Object);另一种是关联到一个类上的单例对象,该单例对象与该类共有相同名字,则这种单例对象称为伴生对象(Companion Object),对应类称为伴生类。 
(2)Java中的类,可以既有静态成员,又有实例成员。而在Scala中没有静态成员(静态字段和静态方法),因为静态成员从严格意义而言是破坏面向对象纯洁性的,因此,Scala借助伴生对象来完整支持类一级的属性和操作。伴生类和伴生对象间可以相互访问对方的 private字段和方法。 伴生类Person的构造函数定义为private,虽然这不是必须的,却可以有效防止外部实例化Person类,使得Person类只能供对应伴生对象使用; 
(3)每个类都可以有伴生对象,伴生类与伴生对象写在同一个文件中; 在伴生类中,可以访问伴生对象的private字段和方法; 而在伴生对象中,也可以访问伴生类的private字段和方法; 
(4)在外部不用实例化,直接通过伴生对象访问内部方法,因为其是静态的。object不能提供构造器参数,也就是说object必须是无参的。 object下的成员都是静态的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值