对于受保护的访问修饰符,与其关联的方法或属性应对其子类可见。这是根据定义。
但有一件事我在这里无法解释。例如,我们有以下代码: 基类:
package com.set.test;
public class ModifierBase {
private int privateInt;
int friendlyInt;
protected int protectedInt;
public int publicInt;
private void displayPrivate(){
System.out.println("displayPrivate");
}
void displayFriendly(){
System.out.println("displayFriendly");
}
protected void displaoyProtected(){
System.out.println("displaoyProtected");
}
public void displayPublic(){
System.out.println("displayPublic");
}
}
一个类将这个扩展到另一个包中。
package com.another;
import com.set.test.ModifierBase;
public class ModifierSubPackgeExtend extends ModifierBase{
public static void main(String[] args) {
ModifierSubPackgeExtend m = new ModifierSubPackgeExtend();
ModifierBase mb = new ModifierSubPackgeExtend();
}
}
m可以访问受保护和公共,这很酷。 但是,mb无法访问受保护的方法或变量。
mb.protectedInt //is not accessable
m.protectedInt //is accessible
为什么?
但对于有着同样榜样的友好:
package com.set.test;
public class ModifierExtend extends ModifierBase {
public static void main(String[] args) {
ModifierExtend m = new ModifierExtend();
ModifierBase mb = new ModifierExtend();
}
}
m和mb都可以访问友方修饰符。
m.friendlyInt
mb.friendlyInt
他们都很好。
为什么在使用基类声明并使用子类进行初始化时,对protected和declare的访问权限和对子类的初始化有不同的访问权限?
答案 0 :(得分:0)
受保护的类,函数等对于当前的类,包和子包是可见的。在类的子类中也可见。
公共变量 - 对所有类都可见。
受保护的变量 - 仅对它们所属的这些类和任何子类可见。
友好变量,默认值 - 不需要修饰符,包可见。
私有变量 - 仅对其所属的类可见。
有关详情,请阅读本文档:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
答案 1 :(得分:0)
受保护的成员变量在超类中声明,但不能从同一实例访问。
在这种情况下,它将无法访问,受保护的非静态变量只有在涉及同一实例时才能从子类访问。