scala :::
在编码的大部分时间里,我使用Java。 所以这是我的主要编程语言。 它在所有方面都使我满意,但是我注意到Java有时太冗长。 这就是为什么我改用Scala的原因。 因此,我现在所有的空闲时间都花在学习Scala上。 我将在博客中发布一些注释,因此欢迎您访问博客的新页面,该页面将专门介绍Scala。 第一篇严肃的文章将关于Scala OOP。
类声明
Scala中的OOP允许创建类。 但是声明的过程与Java相比有所不同。 这是我们如何在Scala中做到这一点:
class Person
没什么难的。 这并不奇怪,我们只声明了绝对无用的类。 让我们进一步看一下如何升级代码以使其更实用。
主要构造函数
我将在Person类中添加一些在对象创建期间需要指定的参数。 你们中许多人可能猜到了,我在说的是主要构造函数 :
class Person(name: String, age: Int)
创建对象时,可以直接调用Primary构造函数。 这是一个例子:
val p1 = new Person("Alex", 24)
也可以在重载的构造函数中间接调用它。 重载不在主题范围内,我将在以下文章中讨论。
前缀构造函数参数
好的,我们已经声明了Person类,并且由于它在主构造函数中传递了一些初始化参数,因此它似乎或多或少有用。 但是,初始化后如何与这些参数进行交互?
scala> p1.name
<console>: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"
<console>:9: error: reassignment to val
p2.name = "Bob"
scala> p2.age
res2: Int = 25
scala> p2.age = 26
p2.age: Int = 26
借助主构造函数中的val和var前缀,您可以使类更实用。
类体
让我们进一步了解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更复杂。 甚至可能还不算复杂,但是它有所不同,并且肯定需要一些时间来适应它。
翻译自: https://www.javacodegeeks.com/2014/03/scala-oop-basics.html
scala :::