Scala类和对象使用解释

本文概述

srcmini最近在该处开设了第一个Scala课程:Scala简介。看看这个!

另外, 请查看以下教程:

  • Scala初学者指南
  • IF ELSE在Scala
  • Scala中的运算子
  • Scala中的列表

介绍

Scala类和对象1

资源

通常, 面向对象编程(OOP)由类和对象组成, 旨在实现诸如多态性, 继承之类的现实世界实体。

OOP使开发方式更快, 更便宜, 并且具有更好的软件可维护性。产生这种魔力的主要原因是它支持的功能数量。与缺少类和对象的程序相比, 你有类和对象可以根据需求在将来轻松重用。反过来, 这导致了更高质量的软件, 该软件也可以通过新的方法和属性进行扩展。

比方说;你有一个汽车展示厅;生产线每隔几个月就会推出一辆新车, 并且要向听众介绍它的名称和功能, 你必须从头开始定义新方法和属性。但是, 如果你有一个具有car类的面向对象程序, 那么你将添加的只是该新汽车的对象, 该对象将使用车辆信息调用类方法和属性。

可以将类视为对象的表示形式或设计。类通常将具有自己的方法(行为)和属性。

属性是将每个对象区分开来并确定对象的各种质量的单独实体。另一方面, 方法更像是函数通常在编程中的操作方式。它们确定类实例的工作方式。主要是因为方法(行为);对象有权对他们执行某些操作。

Scala类和对象2

资源

上图为你提供了有关面向对象编程流程的直观信息, 或者更具体地说, 是类的外观。在上面的图片中, 有一个具有以下属性的类汽车:燃料, 最大速度, 并且可以具有更多属性, 例如模型, 制造等。它具有不同的方法集, 例如refuel(), getFuel(), setSpeed() , 还有一些其他方法可以是换档, 启动发动机, 停止发动机等。

因此, 当你谈论特定的汽车时, 你将拥有一个对象, 它是类的实例。

现在, 让我们谈谈Scala中的面向对象编程。

Scala中的类和对象

与c ++和java一样, Scala中的面向对象编程遵循几乎相同的约定。它具有定义类和对象以及在类构造函数中的概念, 这就是Scala中面向对象编程的全部内容。

类声明

class Class_name{
// methods and attributes
}

Scala中的类由关键字class定义, 后跟类的名称, 通常, 类名以大写字母开头。很少有关键字是可选的, 但是可以在Scala类声明中使用, 例如:class-name, 它应该以大写字母开头:superclass, 父类名称以extend关键字开头:traits, 这是一个用逗号分隔的列表, 已实现通过扩展关键字开头的类。

Scala中的一个类只能继承一个父类, 这意味着Scala不支持多个继承。但是, 可以通过使用”特征”来实现。

最后, Scala中的类主体由花括号{}包围。

// Name of the class is Car
class Car
{

    // Class variables
    var make: String = "BMW"
    var model: String = "X7"
    var fuel: Int = 40

    // Class method
    def Display()
    {
        println("Make of the Car : " + make);
        println("Model of the Car : " + model);
        println("Fuel capacity of the Car : " + fuel);
    }
}
object Main  
{

    // Main method
    def main(args: Array[String])  
    {

        // Class object
        var obj = new Car();
        obj.Display();
    }
}

你可以使用名称class.scala保存上面的代码, 并在终端上将其作为scala class.scala运行, 你应该看到如下输出。

Scala类和对象3

很好, 上面的代码没有完全利用面向对象程序所具有的特权。由于以上代码的输出将返回相同的结果, 而不管你运行了多少次。你在类内定义了静态变量, 即使你创建无限的新对象, 这些变量的值也将保持不变。总之, 你不能期望它会为你提供梅赛德斯奔驰或法拉利汽车的详细信息。

Scala的构造函数

构造函数主要用于初始化对象状态。该对象初始化在对象创建时发生, 并且仅被调用一次。

Scala中有两种类型的构造函数:Primary和Auxiliary。在本教程中, 你将学习有关主构造函数的信息(来源:O’Reilly)。

class Class_name(Parameter_list){
// methods, attributes
}

主构造函数包含与类相同的主体, 并且它与类定义一起隐式创建。它从类定义开始, 并跨越该类的整个主体。同样, 当Scala程序中只有一个构造函数时, 它被称为主要构造函数。可以使用零个, 一个或多个参数来定义主构造函数。

因此, 让我们以前面的示例为例, 但这一次将主要的构造函数功能添加到其中, 并观察其效果。

另外, 你还将在这里学习类的新功能, 即, 一个类可以具有多个对象或实例, 但它们彼此独立。

// Name of the class is Car
class Car(make: String, model: String, fuel: Int)
{

    // Class method
    def Display()
    {
        println("Make of the Car : " + make);
        println("Model of the Car : " + model);
        println("Fuel capacity of the Car : " + fuel);
    }
}

object Main

{

    // Main method
    def main(args: Array[String])  
    {

        // Multiple Class object
        var obj1 = new Car("BMW", "X7", 40);
        var obj2 = new Car("Mercedes Benz", "S350D", 50);
        obj1.Display();
        obj2.Display();
    }
}

让我们快速查看输出:

Scala类和对象4

好吧, 这不是很好吗?借助构造函数, 你可以生成更有效的结果。

在Scala中声明对象

在Scala中声明对象也可以称为实例化一个类或调用一个类。与类相似, 对象也是面向对象编程的基本单元。

一个对象可以包含三个功能(来源:GeeksforGeeks):

  • 状态:对象的属性表示它。它还反映了对象的属性。
  • 行为:对象的方法表示它。它还反映了一个对象对其他对象的响应。
  • 身份:它为一个对象赋予唯一的名称, 并使一个对象能够与其他对象进行交互。

将Dog视为对象, 请参见下图以了解其身份, 状态和行为。

Scala类和对象5

(资源)

所有实例或对象共享类的属性和方法。正如你在此处了解到的, 单个类可以具有多个对象。但是, 每个对象的状态或值都是唯一的。

最后, 你将编写一个将主要构造函数, 类变量, 属性和方法组合在一起的代码。

下面是在Motorcycle类中放在一起的组件的图形表示。

Scala类和对象6

下面的代码是不言自明的;但是, 它会在较高级别上检查摩托车引擎是打开还是关闭。最初, 引擎处于关闭状态, 它将通知你其状态并将其打开。

class Motorcycle(make:String, color:String) {


       var engineState: Boolean = false;

       def startEngine() {
          if (engineState == true){
            println("The engine is already on.");
          }
          else {
            engineState = true
            println("The engine is now on.");
         }
       }

       def showAtts() {
         println("This motorcycle is a "+ color + " " + make);
         if (engineState == true){
           println("The engine is on.");
         }
         else{
            println("The engine is off.");
         }
      }

}
object Main
{
    def main (args: Array[String])
    {
        var m = new Motorcycle("BMW K 1600 GTL", "White");
        println("Calling showAtts...");
        m.showAtts();
        println("------");
        println("Starting engine...");
        m.startEngine();
        println("------");
        println("Calling showAtts...");
        m.showAtts();
        println("------");
        println("Starting engine...");
        m.startEngine();
    }
}
Scala类和对象7

恭喜你!

祝贺你完成本教程。

现在, 你知道如何在Scala中声明类和方法, 实例化对象, 设置其属性以及调用实例方法。这些概念不仅对Scala甚至在其他编程语言中都将对你有用。

面向对象的编程概念很有趣, 同时又非常强大。它为你的代码添加了新的维度, 使其可重复使用。随着你的程序变大, 你的代码将变得越来越复杂。诸如继承, 多态性, 实例方法之类的面向对象编程概念中有很多内容。另一个强大的功能是Singleton。设计原则有助于使代码更加结构化和可读性。有关设计模式的更多信息, 请考虑阅读本书。

请随时在下面的评论部分中提出与本教程相关的任何问题。

最后, 不要忘了参加有关srcmini的新Scala课程” Scala简介”。

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?