加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala当中的类

发布时间:2020-12-16 18:57:07 所属栏目:安全 来源:网络整理
导读:1、类的定义与创建 创建一个scala class来定义我们的一个类。类当中可以定义各种属性或者方法,或者函数都可以 ???? class Person { ?????? // 定义一个属性,叫做 name 的,使用 val 不可变量来进行修饰 ?????? // 用 val 修饰的变量是可读属性,有 getter

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,color:String,gender:String){

????????this(name:String,age:Int)

????????this.color = color

??????}

???? ?

? ?

}

??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读