scala面向对象基本概念
类
抽象类
单例对象
特征
样例类
类Class
特点
类通过class关键字定义
类通过new关键字创建实例
类拥有 成为变量和办法
类的成员默认为public,也支持private、protected </font color>
类中无法定义静态成员变量和方法
类无需明确定义构造方法,通过构造参数列表声明为类的一部分
类的修饰符
Java
Scala
类的定义
构造器:主构造器
辅助构造器:关键字this()
定义成员变量与方法
类的实例化
例如:
class ClassTest(n:Int,m:Int) {
var x:Int = n //成员变量
var y:Int = m
//辅助构造器
def this()= {
this(0,0) //第一句必须调用其他构造器
}
//成员方法
def move(a:Int,b:Int): Unit ={
x = a + x
y = b + y
println(x,y)
}
}
object Test{
def main(args: Array[String]): Unit = {
var p = new ClassTest();
p.x
p.y
p = new ClassTest(12,11)
p.x
p.y
p.move(1,2)
}
}
运行结果:
(13,13)
类的继承
特点:
Scala使用”extends“关键字实现继承
子类重写父类方法必须使用”override"关键字abstract class Father {
def seekBook()={
println("father book")
}
}
class Son extends Father {
override def seekBook(): Unit = {
super.seekBook()
println("son book")
}
}
object Test1{
def main(args: Array[String]): Unit = {
var son = new Son
son.seekBook();
}
}
运行结果:
father book
son book
抽象类
抽象类可包含未实现的方法,即抽象方法
抽象类无法实例化
抽象类使用abstract关键字修饰
注:
子类重写父类抽象方法时,override 关键字可选
子类重写父类非抽象方法,override关键字必写
单例对象(object)
Scala使用单例对象来定义静态成员变量、成员方法和静态代码块:
使用object 关键字声明,可包含变量、方法与代码定义
单例对象中的成员变量、成员方法通过单例对象名直接调用
单例对象第一次访问时初始化,并执行全部代码块
单例对象不能new,且无构造参数
程序入口main() 方法必须定义在单例对象中
单例对象与同名类定义统一文件中时形成绑定关系
object为单例对象,里面的变量是静态变量,方法为静态方法
当同名class、object一起出现时,可以通过apply关键词来实现伴生对象和伴生类
例如:
object Blah {
def sum(I:List[Int]):Int=I.sum
def main(args: Array[String]): Unit = {
println(Blah.sum(List(1,2,3)))
}
}
运行结果:
6
伴生(Companion):伴生对象和伴生类
单例对象与同名类定义在同一文件中时形成绑定关系
同名类称为单例对象的伴生类(class)
单例对象称为同名类伴生对象(object)
伴生类与伴生对象可互相访问个自私有成员
伴生对象可为伴生类增加静态成员
例如:
class Book(title:String,author:String) {
var bookname = title;
var auth = author;
def this() {
this("interseting&#