目录
访问修饰符类型
public
public修饰的变量,类,接口和方法可以被其他所有类访问,不受任何限制。
package abc;
// public修饰的类
public class Addition {
// public修饰的变量
public int a;
public int b;
//public修饰的方法
public int addTwoNumber() {
return a + b;
}
}
package xyz;
import abc.Addition;
public class Test {
public static void main(String[] args) {
Addition addition = new Addition();
addition.a = 1;
addition.b = 2;
System.out.println(addition.addTwoNumber());
}
}
private
- private修饰的变量和方法只能在当前类使用
- 外部类和接口不能使用private修饰符
- 如果一个类有private修饰的构造方法,那么其他类不能实例化该类
例子中的代码会抛出异常,试试将private改成public然后运行以下
package abc;
public class PrivateAccess {
public static void main(String[] args) {
Example example = new Example();
example.name = "xiaohong";
example.printName();
}
}
class Example{
//private修饰的变量
private String name = "xiaoming";
//private修饰的方法
private void printName(){
System.out.println(name);
}
}
private修饰的构造方法不能被实例化对象,会抛出异常,试试将private改成public运行一下
package abc;
public class PrivateAccess {
public static void main(String[] args) {
Example example = new Example("xiaoming", 11);
}
}
class Example{
String name;
int age;
private Example(String name, int age){
this.name = name;
this.age= age;
}
}
protected
- protected修饰的变量和方法能被在同一包和任何其他包的子类访问
- protected不能修饰外部类,该修饰符一般用于继承关系
package abc;
public class ProtectedAccessParent {
protected int a;
protected int b;
protected int addTwoNumbers(){
return a + b;
}
}
package xyz;
import abc.ProtectedAccessParent;
class ProtectedAccessChild extends ProtectedAccessParent {
public static void main(String[] args) {
ProtectedAccessChild p = new ProtectedAccessChild();
p.a = 1;
p.b = 2;
System.out.println(p.addTwoNumbers());
}
}
default
- 不使用任何修饰符,其实默认修饰符和public修饰符类似,只是作用访问范围在当前包内
- 默认修饰的变量,类,接口和方法可以被同一个包下其他所有类访问
下面的示例会抛出异常,你可以把这个类DefaultAccessTest 放到abc这个包下然后运行
package abc;
class DefaultAccess {
int a;
int b;
int addTwoNumber() {
return a + b;
}
}
package xyz;
import abc.DefaultAccess;
public class DefaultAccessTest {
public static void main(String[] args) {
DefaultAccess d = new DefaultAccess();
d.a = 1;
d.b = 2;
System.out.println(d.addTwoNumber());
}
}
访问修饰符表格
访问修饰符 | 当前类 | 同包子类 | 同包非子类 | 不同包子类 | 不同包非子类 |
public | Yes | Yes | Yes | Yes | Yes |
protected | Yes | Yes | Yes | Yes | No |
default | Yes | Yes | Yes | No | No |
private | Yes | No | No | No | No |
修饰范围从小到大:private->default->protected->public