面向对象编程 (OOP)是一种计算机编程模型,它围绕数据或对象来组织软件设计,而不是围绕函数和逻辑。Scala也是一种面向对象的语言,在这篇博客中,我们将看到我们如何在scala中实现这一目标。


Scala中的类
类就像现实世界实体的蓝图,在编程语言中我们称之为对象。它提供了状态的初始值(成员变量或属性),以及行为的实现(成员函数或方法)。在Scala中,我们通过定义一个类来做到这一点。
class Complex(real: Int, imag: Int) {
def getReal = real
def getImag = imag
}
这定义了一个名为Complex 的实体,当我们使用这个类创建一个对象时,它将有两个状态变量real 和imag ,用于定义复数的实部和虚部。
对象
对象是我们使用蓝图(类)创建的一个实体,它有一个状态和行为。在scala中,我们通过两种类型来定义对象。
通过new 关键字
我们可以通过使用scala中的new关键字来创建一个类的对象。例如,如果我们想创建一个Complex 类型的对象,那么我们可以这样做------。
val complexNum = new Complex(1, 2)
这将创建一个复杂类型的对象,状态变量real为1,imag为2。我们可以使用var 关键字来做到这一点。
通过创建单子对象
单子对象是一个不需要明确定义类就可以创建的对象。它是一个定义了一个类的单一对象的对象。我们可以创建一个单子对象,如下所示
object SingletonObject{
def hello(){
println("Hello, This is Singleton Object")
}
}
Scala中的继承
面向对象编程中的继承是一个过程, ,一个类继承了另一个类的属性和方法。我们在Scala中使用extends 关键字来实现继承。下面是一个例子:
class Animal {
val age: Int = 0
def eat() = println("I'm eating")
}
class Dog(val name: String) extends Animal
这里有一个名为Dog 的类,它扩展了Animal ,现在有了Animal 的特征。我们现在可以从Dog 类型的实例中访问eat方法,就像这样:
val aDog = new Dog("Lassie")
aDog.eat()
这将在控制台中打印 "I'm eating"。
Scala中的子类型多态性
多态性是指一个对象具有多种形式的能力。多态性在OOP中最常见的用法是,我们用父类的引用来指代子类对象。下面是Scala中子类型多态性 的一个例子:
class Animal {
val age: Int = 0
def eat() = println("I'm eating")
}
class Dog(val name: String) extends Animal
val aDeclaredAnimal: Animal = new Dog("Hachi")
aDeclaredAnimal.eat()
这将在运行时调用最派生的方法将。aDeclaredAnimal 的类型是在运行时决定的。
这将在控制台中打印 "I'm eating"。
Scala中的Trait
Trait是面向对象编程中的一个概念,它代表了一组可以用来扩展类的功能的方法。它是最终的抽象类型,具有所有未实现的方法,我们在扩展trait的时候实现它们。
下面是我们如何在Scala中声明一个trait:
trait Carnivore {
def eat(animal: Animal): Unit
}
现在我们可以像这样实现一个trait:
class Crocodile extends Carnivore {
override def eat(animal: Animal): Unit = println("I am eating you, animal!")
}
现在,我们可以像这样使用eat方法:
val aNewAnimal = new Animal
val aNewCrocodile = new Crocodile
aNewCrocodile.eat(aNewAnimal)
这将在控制台中打印 "I am eating you, animal!"。"在控制台中。
这是对Scala中面向对象编程的一个简短介绍。