zoukankan      html  css  js  c++  java
  • scala当中的类

    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+" "+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

          }

          

       

    }

       

  • 相关阅读:
    出差常熟,郁闷中 沧海
    ABAP中程序之间传递参数的办法 沧海
    LSMW中出现No logical path specified. 沧海
    请认真对待生活 沧海
    escape sequence 沧海
    休假一周 沧海
    Print Program and Form Modify 沧海
    下周回南京 沧海
    LO020真麻烦 沧海
    函数讲解函数列表(ZT) 沧海
  • 原文地址:https://www.cnblogs.com/starzy/p/10466517.html
Copyright © 2011-2022 走看看