作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
请看下面内容:
package com.test2;
imp
ort com.test1.father;
public class child extends father{
public void getmmm(){
super.say(); -----可以调用的。。ok
father abc=new father();
abc.say(); //
}
public static void main(String a[]){
new child().say();
}
}
package com.test1;
public class father {
protected void say(){
System.out.println("father---protected!!!!!");
}
public static void main(String kk[]){
new father().say();
}
}
在com.fzq.study1包中父类: package com.fzq.study1; public class A { public int intPublic; int intFriendly; protected int intProtected; private int intPrivate; static public int intPublicStactic; static int intFriendlyStactic; static protected int intProtectedStactic; static private int intPrivateStactic; public A() { } /** * @param args */ public static void main(String[] args) { } public void fucPublic(){} void fucFriendly(){} protected void fucProtected(){} private void fucPrivate(){} public static void fucPublicStatic(){} static void fucFriendlyStatic(){} protected static void fucProtectedStatic(){} private static void fucPprivateStatic(){} } 在com.fzq.study2包中的子类: package com.fzq.study2; import com.fzq.study1.*; public class E extends A{ public E() { super.intProtected = 3; super.intPublic = 6; super.intProtectedStactic = 7; super.intPublicStactic = 9; super.fucProtected(); super.fucPublic(); super.fucProtectedStatic(); super.fucPublicStatic(); } /** * @param args */ public static void main(String[] args) { A a = new A(); a.intPublic = 4; //a.intProtected = 6; 不可以这样写,会编译报错 a.intProtectedStactic = 4;可以这样写,不会报错 a.intPublicStactic = 5; a.fucPublic(); a.fucProtectedStatic(); a.fucPublicStatic(); E e = new E(); e.intProtected = 5; e.intPublic = 6; e.intProtectedStactic = 6; e.intPublicStactic = 7; e.fucProtected(); e.fucPublic(); e.fucProtectedStatic(); e.fucPublicStatic(); } } 我想问的问题是:在上述包结构下,为什么在子类E的main()方法中父类对象a不能访问它的protected属性intProtected。