目录
一、对于方法
二、对于类
三、对于属性
总结
- Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符。
被四种访问权限符修饰后能访问的范围:
一、对于方法
四种访问权限符均可修饰类中的方法。
- 在FunctionTest包中定义一个Spoon类:
package FunctionTest;
public class Spoon {
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();
}
private static void printArrayPrivate(String... args){
for(String obj: args){
System.out.print(obj.toString());
}
System.out.println();
}
}
- Test类表示与Spoon类在同一个包的类:
出现错误说明 private修饰的方法不能被同一个包中的其他类(包括子类)访问。与表格一致。
- SubSpoon类表示为Spoon类的不同包的子类:
结果与表格一致。
Test类表示为Spoon类的不同包的非子类:
结果与表格一致。
二、对于类
只有default(不写默认指定default)和public可以修饰任何类,而且类名要与文件名相同。
- 在classtest包中定义一个Class类、Class2类,其中Class类被public修饰、Class2类默认被default修饰:
package classtest;
public class Class {
public Class(){
System.out.println("Class");
}
}
package classtest;
class Class2 {
public Class2(){
System.out.println("Class2");
}
}
- test类表示与Class类、Class2类在同一个包中的类:
未出现错误说明被public、default修饰的类可被同一个包中的其他类访问,与表格一致。
- SubClass类表示为Class类的不同包的子类:
未出现错误说明被public修饰的类可被不同包的子类访问,与表格一致。
- SubClass2表示为Class2类的不同包的子类:
出现错误说明被default修饰的类不能被不同包的子类访问,与表格一致。
- test类表示为Class、Class2不同包的非子类:
结果表示被public修饰的类可被不同包的非子类访问,被default修饰的类不能被不同包的非子类访问,与表格一致。
三、对于属性
- 在ElementTest包中定义Element类:
- Test类表示与Element类在同一个包中的类:
出现错误说明被private修饰的属性不能被同一个包中的其他类访问,与表格一致。
- SubElement类为Element类在不同包中的子类:
被protected、default、private修饰符修饰的属性在不同包中的子类中均不能被访问,与表格不一致(具体原因我也不知道...)。
按照提示,可通过添加getter、setter方法来访问属性:
此时SubElement类中通过访问Element类中的公共方法getStr2()访问被protected修饰符修饰的属性
str3、str4同理 。
总结
通过以上测试,发现开头的表格仅针对方法(此时默认类被public修饰);
而类只能被public修饰符和默认修饰符(default)修饰,但访问范围仍与表格一致;
对于属性,public、default、private修饰的属性与表格一致,protected修饰的属性最多被同一个包中的类访问,与表格有不同。