修饰符访问权限列表

修饰符 当前类 同一包内 子孙类 其他包
public
protected ×
default × ×
private × × ×

参考:https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html


方法修饰符访问权限与多态

1
2
3
4
5
6
7
8
9
10
11
12
class Human {
int value = 1;
public void func() {
System.out.println("human");
}
}
class Man extends Human {
int value = 2;
void func() {
System.out.println("man");
}
}

上面这段程序在编译器会出错,报错信息如下:

1
attempting to assign weaker access privileges

编译报错的原因在于,子类Man在重写父类方法func时赋予了更低的访问权限(public > protected > default > private)

但是为什么不能赋予子类的重写访问更低的访问权限呢?
原因在于Java(和其它编程语言)中的多态性依赖于能够将子类的实例视为超类的实例,但如果该方法在子类中受到限制,编译器就无法确定是否还能调用该子类的方法了。