1.4 Scala面向对象的特性
1.4.1 类与对象
无论是在Scala中还是Java中,类都是对象的抽象,而对象都是类的具体实例;类不占用内存,而对象占用存储空间。由于面向对象的核心是对象,若想要在应用程序中使用对象,就必须得先创建一个类。类是用于描述一组对象的共同特征和行为。
创建类的语法格式如下:
class 类名[参数列表]
当类创建好之后,若是想要访问类中的方法和字段,就需要创建一个对象。
创建对象的语法格式如下:
类名 对象名称 = new 类名();
下面创建一个Point类,并在类中定义两个字段x和y以及一个没有返回值的move( )方法,使Point类的实例对象来访问类中的方法和字段,代码如文件1-7所示:
文件1-1 Ch07_ClassTest.scala
package cn.itcast.scala
//定义类
class Point(xc:Int,yc:Int){
//定义字段
var x:Int = xc
var y:Int = yc
//定义方法
def move(dx:Int,dy:Int):Unit = {
x = x + dx
y = y + dy
println("x的坐标点:"+x)
println("y的坐标点:"+y)
}
}
object Ch07_ClassTest {
def main(args: Array[String]): Unit = {
//定义类对象
val pt = new Point(10,20)
//移动到一个新的位置
pt.move(10,10)
}
}
1.4.2 继承
• Scala和Java类似,只允许继承一个父类。
• Java只能继承父类中非私有的属性和方法,而Scala可以继承父类中的所有属性和方法。
在Scala子类继承父类的时候,有以下几点需要注意
• 如果子类要重写一个父类中的非抽象方法,则必须使用override关键字,否则会出现语法错误。
• 如果子类要重写父类中抽象方法时,则无需使用override关键字
下面,创建一个Point类和Location类,并且Location类继承Point类,演示子类Location重写父类Point中的字段,具体代码如文件1-8所示:
文件1-2 Ch08_ExtendsTest.scala
package cn.itcast.scala
//定义父类:Point类
class Point2(val xc:Int,val yc:Int){
//定义字段
var x:Int = xc