scala学习——类

这篇博客探讨了Scala中的类,包括简单类和无参方法的使用,详细介绍了带有getter和setter的属性,包括默认方法、自定义方法、只读属性以及Bean属性的实现。此外,还讨论了构造器的类型,如辅助构造器和主构造器的语法及应用。最后,文章提到了嵌套类的概念,阐述了如何在Scala中定义和使用嵌套类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简单类和无参方法

class person{
    private var name = "Joe"
    private var age = 20
    def yourName() = name
    def yourage = age
    def increment(){
        age +=1
    }
    def myprint():Unit={
        println(name+" is "+age+" years old !")
    }
}

1).在scala中,类并不声明为public。scala源文件中可以包含多个类,故这些类具有公有可见性;
2).字段必须初始化;
3).方法默认是公有的;
4).调用无参方法时,可以写圆括号,也可以不写。通常我们对取值器省略括号,而改值器使用括号。如:调用以上程序中increment()时使用括号,二调用myprint方法时不使用括号。
5).若对于无参方法,定义时,没有使用圆括号,在调用时也不能使用圆括号。

2.带getter和setter的属性

A.默认的getter和setter方法

class student
    var id = 1001

*在scala中,每个字段都提供getter和setter方法,分别为:id 和 id_=。若字段为公有(public),则其getter、setter方法也是公有的;若字段为私有(private),则其getter、setter方法也是私有的。

B.自定义getter和setter方法

class student {
    private var id = 1001
    def id = id
    def id_= (newId :Int){
        if(id>1001) id = newId
    }
}

C.只带getter属性

如果属性的值构建后,就不在改变,则可以使用val定义字段。

class student {
    val city = "Beijing"
    ...
}

此时,Scala会生成一个final字段和一个getter方法,但没有setter方法。

D.Bean属性

当我们将Scala字段标注为@BeanProperty时,getFoo/setFoo方法会自动生成。如:

import scala.reflect.BeanProperty
class student {
    @BeanProperty var name:String = _
}

此时将会生成如下四个方法:
(1).name:String
(2).name_=(newName:String):Unit
(3).getName():String
(4).setName(newName:String):Unit

3.构造器

A.辅助构造器

1).辅助构造器的名称都为this。(当我们修改类名的时候,不必向JAVA和C++一样来修改构造器)
2).每个辅助构造器都必须以一个先前以定义的其他辅助构造器或主构造器的调用开始。
*如果一个类没有显式地定义一个主构造器,则自动拥有一个无参的主构造器。

class Student{
    private var id = 101
    private var name = "no name"

    def this (id:int){ //辅助构造器
        this() //调用主构造器
        this.id = id
    }
    def this (id:int,name:String){ //辅助构造器
        this(id) //调用上一个辅助构造器
        this.name = name
    }
}

B.主构造器

1).主构造器参数直接放在类名之后。如:

    class Student(var id :int,var name:Stirng){
        ...
    }

当我们实例化一个对象时,val stu = new Student(101,”Joe”),这样即完成了调用主构造器,实例化一个stu对象,并且stu.id = 101 ,stu.name=”Joe”,同时,还默认实现了id和name的getter、setter方法。
2).主构造器会执行类定义中的所有语句。如:

    class Student(var id:int,var name:String){
        println(name+"'s id is "+id)//在调用主构造器时,该语句也被执行
    }

3).我们通常可以通过在主构造器中使用默认参数来避免过多地使用辅助构造器。如:

class Student(var id:int,var name:String ,var city="Beijing"){
    ...
}

4.嵌套类

在Scala中,我们可以在类中嵌套类,在函数中嵌套函数。以下是类中定义类的示例:

import scala.collection.mutable.ArrayBuffer
class Network{
    class Member(val name:String){
        val contacts = new ArrayBuffer[Member]
    }
    private val menbers = new ArrayBuffer[Member]
    def join (name:String){
        val m = new Member(name)
        menbers += m
        m
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值