Scala类基础

最近在开始学习Scala,本篇文章我们来讲解一下Scala中类的使用

class Counter {
    var defaultValue = 0
    val valValue = 0
    private var privateValue = 0
    private[this] var value = 0

    def increment(): Unit = {
        value += 1
    }

    def current(): Int = {
        value
    }

    def current1(): Int = value

    def current2: Int = value

}

object Counter {

    def main(args: Array[String]) {
        val counter: Counter = new Counter
        println(counter.current())
        println(counter.current1())
        println(counter.current2) //不能采用counter.current2()方式调用
    }
}

上面的例子就是一个Scala中的类的一般写法。

有几个需要注意的点:

  • Scala中方法默认都是公有的
  • 必须初始化Scala类中的字段
  • 在Scala中,类并不声明为public, Scala源文件可以包含多个类,并且这些类都具有公共可见性

我们也可以自己定义getter和setter方法:

package com.rollenholt.showcase.scala.clazz

class Counter {
    private var defaultValue:Int = 0

    def value = defaultValue

    def value_= (newValue: Int): Unit ={
        if(newValue == 1){
            defaultValue = 2
        }
    }

}

object Counter {

    def main(args: Array[String]) {
        val counter: Counter = new Counter
        println(counter.value)
        counter.value = 1
        println(counter.value)
        counter.value = 2
        println(counter.value)
    }
}

输出

0
2
2

时间: 2025-01-20 12:00:52

Scala类基础的相关文章

file-一个File类基础问题求解

问题描述 一个File类基础问题求解 如上图,我想实现find方法里面的file为构造函数里面打开的那个file,请问我该怎么写??? 解决方案 在findfile构造函数里面加上 file = new File(pathname);

Scala入门到精通——第十节 Scala类层次结构、Traits初步

本节主要内容 Scala类层次结构总览 Scala中原生类型的实现方式解析 Nothing.Null类型解析 Traits简介 Traits几种不同使用方式 1 Scala类层次结构 Scala中的类层次结构图如下: 来源:Programming in Scala 从上面的类层次结构图中可以看到,处于继承层次最顶层的是Any类,它是scala继承的根类,scala中所有的类都是它的子类 Any类中定义了下面几个方法: //==与!=被声明为final,它们不能被子类重写 final def ==

接触VC之二:MFC类基础,C++程序编写规范介绍

由于本文是面对C语言基础的(因为我就是从C学起来的),而MFC是利用C++类技术构建起来的.因此有必要在此为只了解C的朋友们,普及一下C++语言中类的概念.熟悉C++的朋友可以跳过本部分.从总体来说C++是向下兼容C的,你可以很不费力气地将用C编好了的程序拿到C++环境下编译执行.其C++只不过是在C的基础上添加面向对象技术(OOP),也就是类的概念,且值得一提的是C与C++都是由美国的贝尔实验室(在之前我只知道发明过电话)发明的. 一.什么是类? 按一些书本上的定义来说"就是一种复杂的数据类型

将新行为混合到Groovy和Scala类中

Java 语言的开发人员精通 C++ 和其他语言,包括多继承(multiple inheritance),使得类可以继承自任意数量的父类.多继承带来的一个问题是,不可能确定所继承的功能来自哪个父类.这个问题被称为钻石问题(请参阅 参考资料).钻石问题和多继承中固有的其他复杂性启发了 Java 语言设计者选择 "单继承加接口" 的方法. 接口定义了语义,但没有定义行为.它们非常适合用来定义方法签名和数据抽象,所有 Java 下一代语言都支持 Java 接口,并且无需进行重大的修改.不过,

ASP的(VBScript)类基础学习

首先ASP的(VBScript)类是由事件和方法(它们就是构成类的成员了)构成的!  在 Class 块中,成员通过相应的声明语句被声明为 Private(私有成员,只能在类内部调用) 或 Public(公有成员,可以在类内外部调用) .被声明为 Private 的将只在 Class 块内是可见的.被声明为 Public 不仅在 Class 块的内部是可见的,对 Class 块之外的代码也是可见的.没有使用 Private 或 Public 明确声明的被默认为 Public.在类的块内部被声明为

Scala的类层级:与Java类之异同

图释 11.1 Scala 类层级图 图释11.1展示了Scala的类层级的大纲.层级的顶端是类Any,定义了包含下列的方法: final def ==(that: Any): Boolean final def !=(that: Any): Boolean def equals(that: Any): Boolean def hashCode: Int def toString: String 因为每个类都继承自Any,Scala程序里的每个对象都能用==,!=或 equals比较:用hash

Scala中的类

阅读<Programming in Scala>,整理Scala类.继承.重载相关的一些知识点. 类 Scala使用class来定义类. class Counter { private var value = 0 // 必须初始化字段 def increment() { value += 1 } // 方法默认公有 def current() = value //空括号方法 } Scala中的类不能声明为public,一个Scala源文件中可以有多个类. 类的初始化和调用: val myCou

Javascript中Date类型和Math类型详解_基础知识

Date类型 ECMASCript中的Date类型是在早期中Java中的java.util.Date类基础上构建的.为此Date类型使用自UTC(国际协调时间)1970年1月1日午夜(0时)开始经过的毫秒数来保存日期. 创建日期对象 1.创建当前日期.不需要传入参数 2.创建指定日期.需要传入参数,必须传入表示该日期的毫秒数(即从1970年1月1日午夜起至该日期止经过的毫秒数).为了简化这一计算过程,ECMAScript提供了两个方法:Date.parse()和Date.UTC(). var n

Scala 学习

1.强类型语言 弱类型语言 强类型语言:定义对象或变量时,需要指定其归属类型 一旦一个变量类型确定,它所归属的类型不可再变 弱类型语言:定义变量时不用指定变量类型 在程序运行中,可以改变变量的的归属类型 scala变量定义: var str = "abcd" java: String str = "abcd" 这样写法不是没有指定str的类型,而是没有显式的指定str的类型,它隐式的从变量值中自动判断 显式写法: var str:String = "abc