1、类的定义与创建

创建一个scala class来定义我们的一个类。类当中可以定义各种属性或者方法,或者函数都可以

    class Person {

      //定义一个属性,叫做name的,使用val不可变量来进行修饰

      // 用val修饰的变量是可读属性,有getter但没有setter(相当与Java中用final修饰的变量)

      val name:String ="zhangsan"

      //定义一个属性,叫做age的,使用var可变量来进行修饰

      //用var修饰的变量都既有getter,又有setter

      var age:Int = 28

    
 

      //类私有字段,只能在类的内部使用或者伴生对象中访问

      private val  address:String = "地球上"

    
 

      //类私有字段,访问权限更加严格的,该字段在当前类中被访问

      //在伴生对象里面也不可以访问

      private[this] var pet = "小强"

    
 

      //在类当中定义了一个方法,

      def hello(first:Int,second:String):Int ={

        println(first+"\t"+second)

        250

      }

      /**

        * 定义了一个函数

        */

      val func1 =(x:Int,y:Int) =>{

        x+y

      }

    }

 
 

2、类的实例化以及使用

如果想要使用类的话,那么REPL就满足不了我们的要求了,我们重新创建一个对应的Object的scala文件

    object ScalaClass {

      def main(args: Array[String]): Unit = {

        //创建对象两种方式。这里都是使用的无参构造来进行创建对象的

        val person = new Person

        val person1 = new Person()

        //注意,我们可以使用对象的属性加上_= 给var修饰的属性进行重新赋值

        //其实就是调用set方法,方法名叫做 age_=    

        person.age_= (50)

        //直接调用类的属性,其实就是调用get方法

        println(person.age)

        println(person.hello(50,"helloworld"))

        val func = person.func1(10,20)

        println(func)

        println("============")

      }

    }

 
 

3、属性的getter和setter方法

对于scala类中的每一个属性,编译后,会有一个私有的字段和相应的getter、setter方法生成

    //getter方法

    println(person age)

    //setter方法

    println(person age_= (18))

    //getter方法

    println(person.age)

 
 

 
 

当然了,你也可以不使用自动生成的方式,自己定义getter和setter方法

class Dog2 {

  private var _leg = 4

  def leg = _leg

  def leg_=(newLeg: Int) {

    _leg = newLeg

  }

}

 
 

使用之:

val dog2 = new Dog2

dog2.leg_=(10)

println(dog2.leg)

 
 

规范提示:自己手动创建变量的getter和setter方法需要遵循以下原则:

1) 字段属性名以"_"作为前缀,如:_leg

2) getter方法定义为:def leg = _leg

3) setter方法定义时,方法名为属性名去掉前缀,并加上后缀,后缀是:"leg_=",如例子所示

 
 

4、类的构造器

scala当中类的构造器分为两种:主构造器和辅助构造器

scala当中规定,所有的辅助构造器,最后都必须调用另外一个构造器,另外一个构造器可以是辅助构造器,也可以是主构造器

    //主构造器,直接定义在类上面

    class Dog (name:String,age:Int){

    
 

      //在scala当中,可以直接将代码写在class当中,而在java当中,

      //代码必须包含在方法当中。

      //其实在scala当中,虽然你把代码写在了Class类当中,经过编译之后,

      //class类的代码都进入到了主构造器方法当中去了

      println(name)

      println(age)

    
 

      var gender:String = "";

    
 

       def this(name:String,age:Int,gender:String){

        //每个辅助构造器,都必须以其他辅助构造器,或者主构造器的调用作为第一句

        this(name:String,age:Int)

        this.gender = gender

      }

    
 

      var color ="";

    
 

      /**

        * 我们也可以通过private来进行修饰我们的构造器,

        * @param name

        * @param age

        * @param color

        * @param gender

        */

      private def this(name:String,age:Int,color:String,gender:String){

        this(name:String,age:Int)

        this.color = color

      }

    
 

 
 

}

 
 

scala当中的类的更多相关文章

  1. scala当中的类型参数

    类型参数主要就是研究scala当中的类或者scala当中的方法的泛型 1.scala当中的类的泛型         object Demo8 {          def main(args: Arr ...

  2. Scala学习(五)---Scala中的类

    Scala中的类 摘要: 在本篇中,你将会学习如何用Scala实现类.如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利.本篇的要点包括: 1. ...

  3. scala当中的对象

    1.scala当中的Object 在scala当中,没有类似于像java当中的static修饰的静态属性或者静态方法或者静态代码块之类的,但是我们可以通过scala当中的Object来实现类似的功能. ...

  4. Scala具体解释---------类

    Scala中的类 摘要: 在本篇中.你将会学习怎样用Scala实现类. 假设你了解Java或C++中的类,你不会认为这有多难.而且你会非常享受Scala更加精简的表示法带来的便利.本篇的要点包含: 1 ...

  5. Scala 深入浅出实战经典 第63讲:Scala中隐式类代码实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  6. Programming In Scala笔记-第十一章、Scala中的类继承关系

    本章主要从整体层面了解Scala中的类层级关系. 一.Scala的类层级 在Java中Object类是所有类的最终父类,其他所有类都直接或间接的继承了Object类.在Scala中所有类的最终父类为A ...

  7. 第41节:Java当中的类集框架

    Java当中的类集框架 类集框架,那么什么是类集框架,集合的种类有哪些,类集框架的基础结构. 类集框架是一组类和接口的集合,位于java.util包当中,是用来用户存储和管理对象的,在这个类集合框架中 ...

  8. Scala(三):类

    类:Class 1.简单类和无参方法 2.带getter和setter属性 3.只带getter属性 4.对象私有字段 5.Bean属性 6.辅助构造器 7.主构造器 8.嵌套类 1.简单类和无参方法 ...

  9. Scala中的类学习

    Scala中的类学习 从java了解类的情况下,了解Scala的类并不难.Scala类中的字段自动带getter和setter方法,用@BeanProperty注解生成javaBean对象的getXX ...

随机推荐

  1. CentOS VNC

    CentOS Linux:1.需要安装的包:tigervnc,tigervnc-server 2.配置显示分辨率.桌面和用户:编辑 /etc/sysconfig/vncservers参考注释掉的最后两 ...

  2. C#实现单实例运行

    C#实现单实例运行的方法,也有多种,比如利用 Process 查找进程的方式,利用 API findwindow 查找窗体的方式,还有就是 利用 Mutex 原子操作,上面几种方法中, 综合考虑利用 ...

  3. Package.json中dependencies依赖包中^符号和~符号前缀的区别

    刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...

  4. java 基础 --- volatile

    问题  : volatile 解决的是什么问题 有什么应用场景 概述 某些共享变量的时候我们使用volatile 修饰,它会保证修改的值立即被更新到主存,或是从主存中获取最新的值.它的底层是如何实现的 ...

  5. Java基础教程(7)--运算符

      现在,我们已经学会了如何声明和初始化变量,但你可能想知道如何操作它们.运算符是对一个,两个或三个操作数执行特定操作并返回结果的特殊符号.下表列出了Java中的运算符:   表格中的运算符是按照从上 ...

  6. Java基础教程(6)--数组

    1.基本概念   数组中的每一项称为元素,每个元素都通过数字索引(也可以称为下标)访问,编号从0开始.例如,第4个元素的索引为3.下面的程序创建了一个int类型的数组,把一些值放入数组中并将每个值打印 ...

  7. java的内存区域

    java的内存区域分为程序计数器.java虚拟机栈.本地方法栈.java堆.方法区.运行时常量池. 1.程序计数器 2.java虚拟机栈 3.本地方法栈 4.java堆(新生代和老年代) 5.方法区( ...

  8. poj 3070 Fibonacci 矩阵相乘

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7715   Accepted: 5474 Descrip ...

  9. hdu 2049 考新郎

    假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能. 和之前那道题一样,是错排,但是要乘上排列数. 选对的人有C(N,M)个组合,将它们排除掉,剩下的人就是错排了 #in ...

  10. P1025[SCOI2009]游戏

    windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按 顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对应的数字.然后又在新的 ...