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
九、内部类
每个外部对象的内部类是不同的类