Scala中的面向对象编程指南

140 阅读3分钟

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

Demystifying OOP in Scala. Scala is a must know language if you… | by  Faysal Ishtiaq | MediumDemystifying OOP in Scala. Scala is a must know language if you… | by  Faysal Ishtiaq | Medium

Scala中的类

就像现实世界实体的蓝图,在编程语言中我们称之为对象。它提供了状态的初始值(成员变量或属性),以及行为的实现(成员函数或方法)。在Scala中,我们通过定义一个类来做到这一点。

class Complex(real: Int, imag: Int) {
  def getReal = real
  def getImag = imag
}

这定义了一个名为Complex 的实体,当我们使用这个类创建一个对象时,它将有两个状态变量realimag ,用于定义复数的实部虚部

对象

对象是我们使用蓝图(类)创建的一个实体,它有一个状态和行为。在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中面向对象编程的一个简短介绍。