大数据系列修炼-Scala课程06

来源:互联网 发布:如何创建java项目 编辑:程序博客网 时间:2024/05/17 01:10

核心内容:
1、Scala类的使用实战
2、getter与setter实战
3、对象私有属性


1、Scala类的使用实战

(1)Scala中的类默认是public级别的,如果用户添加public修饰符,将会报错
(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实战

(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方法默认是共有的

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、对象私有属性实战

(1)在scala中,在一个类的内部,所有的成员彼此之间都可以进行相互访问,共有的可以访问私有的,私有的可以访问共有的,因为大家是一家人嘛
(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)      //原因:通过使用对象私有属性机制,将会导致私有属性在类的内部不可以通过类对象名.私有成员名的方式进行访问的   }  }

如有问题,欢迎留言指正!

1 0