Scala 面向对象(OOP)详解

Scala是一种纯粹的面向对象语言,每个值都是对象,与Java高度兼容。它取消了Java的接口,引入特质(Trait),并提供了单例对象、样例类等特性。类和对象是OOP的基础,包括类的定义、继承、抽象类、单例对象、特质和样例类等。泛型类、类型边界和型变进一步丰富了其类型系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值