1.权限解析
Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符。
private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
- default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
- protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
- public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
下面用表格的形式来展示四种访问权限之间的异同点,这样会更加形象。表格如下所示:
同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 | |
Private | √ | |||
Default | √ | √ | ||
Protected | √ | √ | √ | |
Public | √ | √ | √ | √ |
2.代码应用
创建一个Spoon类:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.samsung.wx; public class Spoon { private static void printArrayPrivate(String... args){ for(String obj: args){ System.out.print(obj.toString()); } System.out.println(); } public static void printArrayPublic(String... args){ for(String obj: args){ System.out.print(obj.toString()); } System.out.println(); } protected static void printArrayProtect(String... args){ for(String obj: args){ System.out.print(obj.toString()); } System.out.println(); } static void printArrayDefault(String... args){ for(String obj: args){ System.out.print(obj.toString()); } System.out.println(); } }
在另一个包中调用Spoon的方法,只有public方法可以被调用:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.samsung.wx2; import com.samsung.wx.Spoon; public class Test { public static void main(String[] args) { Spoon.printArrayPublic("public"); } }
创建一个类SubSpoon继承Spoon(和Spoon在不同包中), 可以在SubSpoon中调用Spoon的protect方法:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.samsung.wx2; import com.samsung.wx.Spoon; public class SubSpoon extends Spoon{ public SubSpoon() { Spoon.printArrayProtect("protect"); } }