Scala是一种面向对象的语言
1.1.1类与对象
无论是在Scala中还是Java中,类都是对象的抽象,而对象都是类的具体实例;
创建类的语法格式如下:
1 class 类名[参数列表]
当类创建好之后,若是想要访问类中的方法和字段,就需要创造一个对象。
创建对象的语法格式如下:
1 类名 对象名称 = new 类名();
下面,我们创建一个Point类, 并在类中定义两个字段x和y以及一个没有返回值的move()方法,使用Point类的实例对象来访问类中的方法和字段,代码如下:
class Point(x:Int,y:Int) { //x轴,y轴
var xc =x
var xy =y
def move(dx:Int,dy:Int)={ //
xc+=dx
xy+=dy
println("x的坐标点为:"+xc)
println("y的坐标点为:"+xy)
}
}
object ClassTest {
def main(args: Array[String]){
//定义类对象
val pt=new Point(10,20); //初始坐标
//移到一个新位置
pt.move(10,10);
}
}
1.1.2继承
Scala和Java类似,只允许继承一个父类。不同的是,Java只能继承父类中非私有的属性和方法。而Scala可以继承父类中的所有属性和方法。
在Scala子类继承父类的时候,有以下几点需要注意:
如果子类要重写一个父类中的非抽象方法,则必须使用override关键字,否则会出现语法错误如果子类要重写父类中的抽象方法时,则不需要使用override关键字。
下面,创建一个Point类和一个Location类,并且Location类继承Point类,演示子类Location重写父类Point中的字段,代码如下:
class Point1( xc:Int, yc:Int){
var x=xc
var y=yc
def move(dx:Int,dy:Int): Unit ={
x+=dx
y+=dy
println("x的坐标为:"+x)
println("y的坐标为:"+y)
}
}
//定义子类继承父类Point
class Location( val xc:Int, val yc:Int,zc:Int)extends Point1(xc:Int,yc:Int){
var z=zc
def move(dx:Int,dy:Int,dz:Int): Unit ={
x+=dx
y+=dy
z+=dz
println("x的坐标为:"+x)
println("y的坐标为:"+y)
println("z的坐标为:"+z)
}
}
object ExtendsTest {
def main(args: Array[String]): Unit = {
//定义Location对象
val loc=new Location(10,10,10)
loc.move(10,10,10)
}
}
1.1.3单例对象和伴生对象
在Scala中,没有静态方法或静态字段,所以不能用类名直接访问类中的方法和字段,而是创建类的实例对象去访问类中的方法和字段。但是,Scala中提供了object这个关键字用来实现单例模式,使用关键字object创建的对象为单例对象。
创建单例对象的语法格式如下:
1 object objectName
下面,创建一个单例对象SingletonObject,代码如下:
object SingletonObject{
def hello()={
println("这是一个单例对象")
}
}
object Singleton {
def main(args: Array[String]): Unit = {
SingletonObject.hello()
}
}
在Scala中,在一个源文件中有一个类和一个单例对象,若单例对象名与类名相同,则把这个单例对象称作伴生对象;这个类则被称为是单例对象的伴生类。类和伴生对象之间可以相互访问私有的方法和字段。
下面,定义一个伴生对象Dog,演示操作类中的私有方法和字段,代码如下:
//伴生类 class bansheng{ private var name="二哈" def printName(): Unit ={ println(bansheng.CONSTANT+name) } } //伴生对象 object bansheng { //伴生对象中添加私有字段 private var ConSTANT="旺旺" def main(args: Array[String]): Unit = { val dog=new bansheng dog.name="我才不是二哈" dog.printName() } }
1.1.4特质
在Scala中,Trait(特质)的功能类似于Java中的接口,Scala中的Trait可以被类和对象(Object)使用关键字extends来继承
创建特质的代码如下:
1 trait traitName
下面我们创建一个特质Animal,演示操作,代码如下:
//定义特质即接口
trait Animal{
def speak() //抽象方法(没有方法体的方法)
def listen(): Unit ={
}
def run(): Unit ={
println("I CAN RUNNING")
}
}
//定义类继承特质
class Peo extends Animal{
//继承抽象类或特质即接口时必须重写其抽象方法
override def speak(): Unit = {
println("I'm speaking Chinese")
}
}
object people {
def main(args: Array[String]): Unit = {
val people = new Peo
people.speak()
people.run()
people.listen()
}
}



