大数据系列修炼-Scala课程06
2016-08-09 14:02
459 查看
核心内容:
1、Scala类的使用实战
2、getter与setter实战
3、对象私有属性
(1)Scala中的类默认是public级别的,如果用户添加public修饰符,将会报错
(2)Scala中的属性默认是private级别的,Scala中的方法默认是public级别的.
(3)类中的属性必须被赋值,否则会报错
示例程序:
上面的Scala程序等同于下面的Java程序,很明显Java程序显得稍微复杂一点:
(1)类中的var属性自动带有getter方法和setter方法
(2)getter方法和setter方法默认是共有的,但是如果属性加上了private修饰符(尽管字段本身已经是private了),则getter方法和setter方法将会变成私有的
(3)用户可以自行定义类setter方法和getter方法的函数
(4)被val修饰的属性,在底层是final类型的private字段,只有getter方法,没有setter方法(符合我们在Java中学的:被final修饰的属性,一旦被赋值,数值将不能被修改,同时也符合Scala中的val永不改变的规定)
示例程序1:用户没有对属性加上private修饰符,此时getter方法与setter方法默认是共有的
示例程序2:用户对属性加上了private修饰符,此时getter方法与setter变成私有的了,为了能够访问私有属性,我们需要自行定义类似setter方法和getter方法的函数
示例程序3:被val修饰的属性,只有getter方法,没有setter方法
(1)在scala中,在一个类的内部,所有的成员彼此之间都可以进行相互访问,共有的可以访问私有的,私有的可以访问共有的,因为大家是一家人嘛
(2)在一个类的外部,通过类对象名.私有成员名的方式是不能访问类的私有成员的,但是在一个类的内部,通过类对象名.私有成员名的方式是可以访问类的私有成员的(这句话等同于在一个类的内部,方法是可以访问这个类所构造的对象的私有成员的)
(3)通过使用private[this]修饰符,将会导致在一个类的内部,通过类对象名.私有成员名的方式是不可以访问类的私有成员的,这是一种更加严格的访问限制(这句话等同于通过使用private[this]修饰符,将会导致在一个类的内部,方法是不可以访问这个类所构造的对象的私有成员的)—->这种情况叫做对象私有属性
(4)在Spark中,在属性配置或驱动生成的时候常用对象私有属性机制,通过使用private[this]这种机制,可以很好的进行实例成员的隔离.
(5)private[this]只可以被当前类的对象本身使用,不可以被当前类的方法使用。
示例程序1:在一个类的内部,方法是可以访问这个类所构造的对象的私有成员的(不加private[this])
示例程序2:通过使用private[this]修饰符,将会导致在一个类的内部,方法是不可以访问这个类所构造的对象的私有成员的
如有问题,欢迎留言指正!
1、Scala类的使用实战
2、getter与setter实战
3、对象私有属性
1、Scala类的使用实战 |
(2)Scala中的属性默认是private级别的,Scala中的方法默认是public级别的.
(3)类中的属性必须被赋值,否则会报错
示例程序:
class Student //类默认是public级别的 { val name = "zhangsan" //属性默认是private级别的 var score = 60.0 def fun() //方法默认是public级别的 { println(name+"\t"+score) } }
上面的Scala程序等同于下面的Java程序,很明显Java程序显得稍微复杂一点:
class Student { private String name = "zhang"; public double score = 60.0; public void fun() { System.out.println(name+"\t"+score); } }
2、getter与setter实战 |
(2)getter方法和setter方法默认是共有的,但是如果属性加上了private修饰符(尽管字段本身已经是private了),则getter方法和setter方法将会变成私有的
(3)用户可以自行定义类setter方法和getter方法的函数
(4)被val修饰的属性,在底层是final类型的private字段,只有getter方法,没有setter方法(符合我们在Java中学的:被final修饰的属性,一旦被赋值,数值将不能被修改,同时也符合Scala中的val永不改变的规定)
示例程序1:用户没有对属性加上private修饰符,此时getter方法与setter方法默认是共有的
object App6 { def main(args:Array[String]):Unit= { val aa = new Student() aa.score = 80.0 //实际上调用的是setter方法设置的score数值 println(aa.score) //实际上调用的是getter方法获取的score数值 } } class Student { var score = 60.0 //类中的属性默认是private级别的,私有成员在类的外部是不能被访问的 }
示例程序2:用户对属性加上了private修饰符,此时getter方法与setter变成私有的了,为了能够访问私有属性,我们需要自行定义类似setter方法和getter方法的函数
object App6 { def main(args:Array[String]):Unit= { val aa = new Student() /***aa.score = 80.0 println(aa.score)***不能在这么写了***/ aa.setter(88.0) println(aa.getter()) } } class Student { private var score = 60.0 //此时默认的getter方法与setter变成私有的了,在类的外部将不能被使用 //自定义类似setter与getter的函数(名字可以任意取值) def setter(score:Double)= { this.score = score } def getter()=score }
示例程序3:被val修饰的属性,只有getter方法,没有setter方法
object App6 { def main(args:Array[String]):Unit= { val aa = new Student() println(aa.name) //实际调用的是aa对象的getter方法 //aa.name = "lisi" -->如果这样写将会报错,因为被final修饰的属性数值不能发生改变 } } class Student { val name = "zhang" }
3、对象私有属性实战 |
(2)在一个类的外部,通过类对象名.私有成员名的方式是不能访问类的私有成员的,但是在一个类的内部,通过类对象名.私有成员名的方式是可以访问类的私有成员的(这句话等同于在一个类的内部,方法是可以访问这个类所构造的对象的私有成员的)
(3)通过使用private[this]修饰符,将会导致在一个类的内部,通过类对象名.私有成员名的方式是不可以访问类的私有成员的,这是一种更加严格的访问限制(这句话等同于通过使用private[this]修饰符,将会导致在一个类的内部,方法是不可以访问这个类所构造的对象的私有成员的)—->这种情况叫做对象私有属性
(4)在Spark中,在属性配置或驱动生成的时候常用对象私有属性机制,通过使用private[this]这种机制,可以很好的进行实例成员的隔离.
(5)private[this]只可以被当前类的对象本身使用,不可以被当前类的方法使用。
示例程序1:在一个类的内部,方法是可以访问这个类所构造的对象的私有成员的(不加private[this])
class Student { val name = "zhang" def fun(aa:Student) { println(aa.name) //私有属性在类的内部是可以通过类对象名.私有成员名的方式进行访问的 } }
示例程序2:通过使用private[this]修饰符,将会导致在一个类的内部,方法是不可以访问这个类所构造的对象的私有成员的
class Student { private[this] val name = "zhang" def fun(aa:Student) { //报错:println(aa.name) //原因:通过使用对象私有属性机制,将会导致私有属性在类的内部不可以通过类对象名.私有成员名的方式进行访问的 } }
如有问题,欢迎留言指正!
相关文章推荐
- 大数据系列修炼-Scala课程35
- 大数据系列修炼-Scala课程48
- 大数据系列修炼-Scala课程64
- 大数据系列修炼-Scala课程69
- 大数据系列修炼-Scala课程03
- 大数据系列修炼-Scala课程02
- 大数据系列修炼-Scala课程60
- 大数据系列修炼-Scala课程63
- 大数据系列修炼-Scala课程58
- 大数据系列修炼-Scala课程06
- 大数据系列修炼-Scala课程27
- 大数据系列修炼-Scala课程24(1)
- 大数据系列修炼-Scala课程49
- 大数据系列修炼-Scala课程19
- 大数据系列修炼-Scala课程31
- 大数据系列修炼-Scala课程46
- 大数据系列修炼-Scala课程11
- 大数据系列修炼-Scala课程42
- 大数据系列修炼-Scala课程68
- 大数据系列修炼-Scala课程67