Scala面向对象编程综述
1.Scala是纯粹的面向对象的语言
Scala 是纯粹的面向对象的语言,每个值都是对象,每个操作都是方法调用。
2.Scala大量重用了Java中的类型
Scala 与 Java 完全兼容,Scala 程序会被编译成 Java 字节码,访问 Java 字段,继承 Java 类,实现 Java 接口都不需要特别的语法。
3…Scala OOP 比较 Java OOP 的主要差异
(1)Scala取消了接口(Interface),新增了类似的特质概念(Trait)。
(2)Scala 取消静态字段和方法,新增单例对象的概念(Singleton Object)。
(3)Scala 新增了样例类(case class)
Scala类和对象
类是对对象的抽象模板,描述了该类对象可以拥有的属性和方法
对象是类的具体实例。
1.类的基本概念
(1)类通过class关键字定义
(2)类通过new关键字创建实例
(3)类拥有成员变量和方法
(4)类的成员默认为public,也支持private、protected
(5)类中无法定义静态成员变量和方法
(6)类无需明确定义构造方法,通过构造参数列表声明为类的一部分
2.类的定义
(1)构造器
所有构造器都没有返回值。
①主构造器
主构造器便是“类名(构造参数列表)”
//主构造器的参数列表直接定义在类名后面
class Point(xc: Int, yc: Int) {
var x: Int = xc //成员变量
var y: Int = yc
②辅助构造器
辅助构造器“this(构造参数列表)”,类似于 Java 中的构造方法重载
注意辅助构造器必须间接或直接调用主构造器。
def this() ={
this(0, 0) //第一句必须调用其他构造器
}
(2)成员变量和方法
①类中可以有字段和方法,统称为成员变量。字段可以用 var 或 val 定义,都是指向对象的变量,var 字段表示可以重新赋值,val 不能。
//成员方法
def move(dx: Int, dy: Int) ={
x = x + dx
y = y + dy
}
}
②在方法不需要参数时可以定义成下面两种方法:
对于无参数方法的方法形式 obj.width 又像是在直接引用 obj 对象的width 属性,这种统一性就叫做统一访问原则。
def width():Int=x //空括号方法,调用方式:obj.width 或者 obj.width()
def width:Int=x //无参数方法,调用方式:obj.width
③在 Scala 中,严格来说是没有 getter 和 setter 这个说法,使用了“value”和“value_=”两个方法来分别代替了 getter 和 setter。
class Counter(var value:Int)
class Counter{
private var privateValue = 0;//私有变量,外界无法直接访问
def value = privateValue;//定义一个方法,代替 getter
def value_= ( newValue : Int ){
// value_= 是方法名字,代替 setter
value = newValue;
} //注意,scala 中默认方法是 public 的 }
(3)类的实例化
使用 new 关键字实例化一个类。
var p=new Point()
p.x
p.y
p=new Point(12,11)
p.x
p.y
p.move(1,2)
(4)类的继承
①Scala使用“extends”关键字实现继承
②子类重写父类方法必须使用“override”关键字
class Person {
override def toString = getClass.getName +"name="
}
class Employee extends Person {
override def toString = super.toString
}
val p=new Person
p.name="zhangsan"
println(p.toString)
val e=new Employee
e.name="lisi"
println(e.toString)
println(p.isInstanceOf[Person]) //true