scala学习之旅(六)(面向对象编程之类)

文章地址:http://www.haha174.top/article/details/256593
1.定义一个简单的类

//定义类包含field方法 class HelloClass { private var name="leo"; def sayHello(){println("hello"+name)} def getName()=name }

//创建类的对象并调用其方法
var hello=new HelloClass hello.sayHello() println(hello.getName())

2.getter 和setter 1.定义不带private 的var field scala 会自动提供提供public 的set 和get 方法
2.定义带private 的set 和get 方法 scala 会自动生成set 和get 方法 也是private 的
3.如果定义 val field 只会生成 get 方法
4.如果不需要set 和get 方法 则可以将field 声明为private[this]
5.调用set 和get 方法分别石 name 和 name_
6.自定义set 和get
如果只需要简单的set 和get 可以根据scala 的语法选择合适的修饰符即可,
如果需要自定义set get ,自定义set 方法的时候一定要注意scala 的语法限制,签名·=,参数之间不能又空格。
7.java 风格的getter 和setter 方法
如果让scala 生成java 生成setter 和getter 方法,只要给 field 添加 @BeanProperty注解即可 此时会生成4个方法
name:String,name_=(newValue:String):Unit,getString():String,setName=(newValue:String):Unit。
@BeanProperty var age:Int=_;

3.constructor 【scala学习之旅(六)(面向对象编程之类)】在Scala中,可以给类定义多个辅助constructor 类似java 中的构造重载,
辅助constructor可以相互调用,而且必须第一行调用主constructor
def this(name:String){ this() this.name=name } def this(name:String,age:Int){ this(name) this.age=age }

在scala 中主 constructor与类名放到一起的
class HelloClass

主 constructor可以通过类名设定参数和默认值
如果主主 constructor传入的参数什么修饰都没有,如name:String 如果类的内部用到了则会申明private[this] name; 否则没有该field 只能被constructor代码使用
4.内部类 在scala 中同样也可以定义内部类,但是与java 不同的是,每个外部类的对象的内部类都是不同的类
/** * 第一种方式 * 在内部类通过【外部类.this.成员名称】 访问外部类成员 */ class OuterClass(val name:String){class InnerClass(val name:String){def info = println("Outer name :" + OuterClass.this.name + ",Inner Name :" + name); } }/** * 第二种方式 * 在内部类通过【外部类别名】 访问外部类成员 */ class OuterClass2(val name:String){ outer => class InnerClass2(val name:String){def info = println("Outer name :" + outer.name + ",Inner Name :" + name); } }object OuterAndInnerClassTest {def main(args: Array[String]): Unit = {println("第一种访问方式:") val outer1 = new OuterClass("yy") val inner1 = new outer1.InnerClass("xx") inner1.info println("第二种访问方式:") val outer2 = new OuterClass2("yy2") val inner2 = new outer2.InnerClass2("xx2") inner2.info} }

欢迎关注,更多福利 scala学习之旅(六)(面向对象编程之类)
文章图片
这里写图片描述

    推荐阅读