Scala学习日志(1)—— 变量和方法的访问修饰符细节
(笔记知识来源-尚硅谷韩顺平Scala)
可以理解为在scala中遵循一个变量或方法要么可见,要么不可见,这点比java要更加的清晰明了。
案例:定义变量和方法,并使用不同的访问修饰符修饰
- 定义如下,分别为默认,私有,受保护的
- 对比查看反编译后的源码:
- 写object class进行测试
问题:为什么protected修饰的变量和方法在反编译后看到的是public修饰,却依然不能访问呢?
答:因为protected在scala中比java更加严格,只能其子类访问,同包也不可访问,这种限制并不是编译之后做的,而是在编译之前,是编译器语法在控制,也就是我们在写代码的时候,
如果这样调用,就会直接编译不通过,虽然反编译后看到是public,但是在写代码的时候,编译器的语法就已经控制了我们不可以访问。
总结:
1.在scala中如果变量不显式声明访问修饰符,则编译后默认为private修饰,且具有公共的方法,可以进行读写。
2.如果显式的声明一个变量为private类型,则编译后也为private修饰,但其读写方法也是私有的。
3.当显式声明一个变量为protected修饰,则编译后也为private修饰,且具有公共的读写方法。但只能在其子类中进行调用,同包下的类不可访问
4.当显式声明一个方法为protected修饰,和变量一样,编译后虽为public只能在其子类中进行调用,同包下的类不可访问
5.如果不声明方法的访问修饰符,则默认为public