Scala:OOP基础

在编码的大部分时间里,我使用Java。 所以这是我的主要编程语言。 它在各个方面都使我满意,但是我注意到Java有时太冗长。 这就是为什么我改用Scala的原因。 因此,我现在所有的空闲时间都花在学习Scala上。 我将在博客中发布一些注释,因此欢迎您访问博客的新页面,该页面将专门介绍Scala。 第一篇严肃的文章将关于Scala OOP。 Scala:OOP基础_第1张图片

类声明

Scala中的OOP允许创建类。 但是声明的过程与Java相比有所不同。 这是我们如何在Scala中做到这一点:

class Person

没什么难的。 这并不奇怪,我们只声明了绝对无用的类。 让我们进一步看一下如何升级代码以使其更实用。

主要构造函数

我将在Person类中添加一些在对象创建期间需要指定的参数。 你们中许多人可能猜到了,我在说的是主要构造函数

class Person(name: String, age: Int)

创建对象时,可以直接调用Primary构造函数。 这是一个例子:

val p1 = new Person("Alex", 24)

也可以在重载的构造函数中间接调用它。 重载已超出主题,我将在以下文章中讨论。

前缀构造函数参数

好的,我们已经声明了Person类,并且由于它在主构造函数中传递了一些初始化参数,因此它似乎或多或少有用。 但是初始化后如何与这些参数进行交互?

scala> p1.name
:10: error: value name is not a member of Person
              p1.name

如您所见,尝试访问Person实例类的name参数会导致错误。 这是因为name参数在主构造函数声明中没有任何前缀。 因此, 名称年龄参数被声明为私有,并且在Person类之外无法访问。

class Person(val name: String, var age: Int)

我修改了Person类声明。 现在, name参数将使用getter提供,因为它以val为前缀,并且age参数将除了setter之外还提供使用setter,因为它以var为前缀。

scala> val p2 = new Person("Bobby", 25)
p2: Person = Person@30374534

scala> p2.name
res1: String = Bobby

scala> p2.name = "Bob"
:9: error: reassignment to val
       p2.name = "Bob"

scala> p2.age
res2: Int = 25

scala> p2.age = 26
p2.age: Int = 26

借助主构造函数中valvar前缀,您可以使类更实用。

类体

让我们进一步了解Scala中的OOP基础知识。 现在,我想展示Scala类在类体内包含一些其他功能时如何变得更加实用。

class Person(val name:String, var age:Int) {
def introduce() = 
println(s"Hi, my name is ${name}, I'm ${age} years old")
}

现在, Person类的一个实例更具有社交性,他(她)可以向某人介绍自己。 尝试代码:

val p3 = new Person("Jhon", 33)
p3.introduce

摘要

在这篇文章中,我尝试概述了Scala OOP的最简单和必要的基础知识。 在我看来,Scala OOP比Java OOP更复杂。 也许甚至还不算复杂,但是它有所不同,并且肯定需要一些时间来适应它。

参考: Scala: Fruzenshtein的笔记博客中来自JCG合作伙伴 Alexey Zvolinskiy的OOP基础知识 。

翻译自: https://www.javacodegeeks.com/2014/03/scala-oop-basics.html

你可能感兴趣的:(Scala:OOP基础)