//A.java
package modif;
public class A {
private int a1=1;
int a2=2;
protected int a3=3;
public int a4=4;
}
//第2个文件A11.java
package modif2;
import modif.A;
public class A11 extends A{
public static void main(String[] args){
A a=new A();
System.out.println(""+a.a3);//错误
}
public int m2(){
return this.a3;//正确
}
}
请高手帮忙解释一下正确和错误的地方,谢了!
package modif;
public class A {
private int a1=1;
int a2=2;
protected int a3=3;
public int a4=4;
}
//第2个文件A11.java
package modif2;
import modif.A;
public class A11 extends A{
public static void main(String[] args){
A a=new A();
System.out.println(""+a.a3);//错误
}
public int m2(){
return this.a3;//正确
}
}
请高手帮忙解释一下正确和错误的地方,谢了!
如果把m2()中的this.a3改成 new A11().a3也是正确的.
所以this.a3能访问自身的a3,当想访问A类的实例的a3时无权限.
终于在doc中找到答案啊.呵呵.但是只能通过子类进行访问.
也就是子类继承了父类的public ,protected成员、
public int m2()
{
return this.a3 《 =====》 return a3;
}
注解:a3在父类中用protected修饰,那么他会被它的子类所继承。
如果你在子类中生成了一个父类的实例,然后在引用它protected修饰的成员,这种情况和在其他类中引用父类的成员是一样的,是不可以访问的。
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=210858这里应该是存在理解protected访问权限的问题。
子类是继承了父类的protected的字段或者方法,但是子类只可以访问继承类的protected,而不能创建父类的对象访问protectedSystem.out.println(""+a.a3);//错误
这条语句就是创建父类的对象,并且尝试通过父类对象访问protected的a3return this.a3;//正确
这个语句就是访问子类继承来的protected的a3
1) private
类中限定为private的成员,只能被这个类本身访问。
如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
2) default
类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。
3) protected
类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。
4) public
类中限定为public的成员,可以被所有的类访问。java中类的限定词的作用范围比较 同一个类 同一个包 不同包的子类 不同包非子类
private *
default * *
protected * * *
public * * * *