Scala学习日志(1)—— 变量和方法的访问修饰符细节

(笔记知识来源-尚硅谷韩顺平Scala)

可以理解为在scala中遵循一个变量或方法要么可见,要么不可见,这点比java要更加的清晰明了。

案例:定义变量和方法,并使用不同的访问修饰符修饰

  1. 定义如下,分别为默认,私有,受保护的
    Scala学习日志(1)—— 变量和方法的访问修饰符细节
  2. 对比查看反编译后的源码:
    Scala学习日志(1)—— 变量和方法的访问修饰符细节
  3. 写object class进行测试
    Scala学习日志(1)—— 变量和方法的访问修饰符细节

问题:为什么protected修饰的变量和方法在反编译后看到的是public修饰,却依然不能访问呢?

:因为protected在scala中比java更加严格,只能其子类访问,同包也不可访问,这种限制并不是编译之后做的,而是在编译之前,是编译器语法在控制,也就是我们在写代码的时候,
如果这样调用,就会直接编译不通过,虽然反编译后看到是public,但是在写代码的时候,编译器的语法就已经控制了我们不可以访问。

总结:

1.在scala中如果变量不显式声明访问修饰符,则编译后默认为private修饰,且具有公共的方法,可以进行读写。

2.如果显式的声明一个变量为private类型,则编译后也为private修饰,但其读写方法也是私有的。

3.当显式声明一个变量为protected修饰,则编译后也为private修饰,且具有公共的读写方法。但只能在其子类中进行调用,同包下的类不可访问

4.当显式声明一个方法为protected修饰,和变量一样,编译后虽为public只能在其子类中进行调用,同包下的类不可访问

5.如果不声明方法的访问修饰符,则默认为public