Scala学习(四)类

一、简单的类

 注意:

val helloWorld=new HelloWorld

1、如果定义的方法名称没有加括号,在调用时,就不能加括号,如getName,调用时直接getName;helloWorld.getName,加了括号就会报错

2、如果方法名称带括号的,调用时,可以加括号也可以不加括号;helloWorld.sayHello()或helloWorld.sayHello

 

二、getter与setter方法

1、var field ;不带private修饰符,虚拟机会自动为属性添加private,并生成public的getter和setter方法

2、private var field :  自动生成private 修饰的getter setter方法

3、val修饰,自动生成getter方法,不生成setter

4、private[this]不生成getter setter

 

三、调用get和set分别叫做:fieldname 和fieldname=

如class Student{

  var name="zhangsan"

}

val student=new Student

student.name就得到了值

student.name="lisi"值被修改

 

四、手动写getset方法

 myname本来不可访问

通过定义暴露方法来修改myname的值。

 五、private修饰的字段是类私有的,会自动生成private修饰的get set方法,在其他类中使用时,是无法访问的。

但是,如果是在自己类的内部,是可以访问该类其他对象的该字段的。如图

 compareAge方法中传入了Student类的另一个对象,所以可以访问age字段。如果传入的是两一个类比如Teacher类,那么就无法访问了。如下图

 先定义了一个Teacher类,再在Student中进行age比较,直接编译报错,如下图:

 但是,如果说想要自己同类型的对象也无法访问的话,就用private[this]修饰

六、java风格的getter和setter,加@BeanProperty

@BeanProperty var name: String=_

或 class Student(@BeanProperty var name:String)

七、辅助constructor

 在类中自定义构造方法,方法名为this,参数任意指定,但是必须要在方法内第一行重写类的主构造方法,如当前是无参构造方法,所以调用this(),如果主构造函数有参,那就调用有参的

 上图的辅助构造函数this中,先调用有参构造方法this(age)

八:主构造函数

  1、类名后面括号为主构造函数,如class Student(age:String)

  2、没有定义在方法中的代码,都属于主构造函数,如 下

    class Student(age:String){

      println("this") 这一行就属于主构造函数代码的一部分

    }

  3、主构造函数可以使用默认参数class Student(age:String=20) 这里age未使用var或val修饰,所以会被默认为private[this],不会自动生成getset

    如果用var或val修饰,则会生成getset

九、内部类

每个外部对象的内部类是不同的类

 

posted @ 2023-10-18 11:12  董振  阅读(2)  评论(0编辑  收藏  举报