关于访问控制符的疑问?

saint13 2005-11-11 04:53:22
//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;//正确

}
}
请高手帮忙解释一下正确和错误的地方,谢了!
...全文
143 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Croatia 2005-11-15
  • 打赏
  • 举报
回复
java语言中有四种不同的限定词,提供了四种不同的访问权限。
1) private
  类中限定为private的成员,只能被这个类本身访问。
  如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
2) default
  类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。
3) protected
  类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。
4) public
  类中限定为public的成员,可以被所有的类访问。

java中类的限定词的作用范围比较

同一个类 同一个包 不同包的子类 不同包非子类
private *
default * *
protected * * *
public * * * *

fankobe 2005-11-14
  • 打赏
  • 举报
回复
你可以参考我以前做过的讨论:
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=210858

这里应该是存在理解protected访问权限的问题。
子类是继承了父类的protected的字段或者方法,但是子类只可以访问继承类的protected,而不能创建父类的对象访问protected

System.out.println(""+a.a3);//错误
这条语句就是创建父类的对象,并且尝试通过父类对象访问protected的a3

return this.a3;//正确
这个语句就是访问子类继承来的protected的a3
ysycrazy 2005-11-14
  • 打赏
  • 举报
回复
用protected修饰的成员,可以在任何地方被它的继承
也就是子类继承了父类的public ,protected成员、
public int m2()
{
return this.a3 《 =====》 return a3;

}
注解:a3在父类中用protected修饰,那么他会被它的子类所继承。
如果你在子类中生成了一个父类的实例,然后在引用它protected修饰的成员,这种情况和在其他

类中引用父类的成员是一样的,是不可以访问的。
Octer 2005-11-13
  • 打赏
  • 举报
回复
to :pdvv(我爱花猫) 你的比喻有意思,呵呵
taoyuming 2005-11-13
  • 打赏
  • 举报
回复
就是说protected只依赖于"继承".
saint13 2005-11-13
  • 打赏
  • 举报
回复
protected 变量应该是可以被子类访问(不管是否在同一个包中)
终于在doc中找到答案啊.呵呵.但是只能通过子类进行访问.
liu_you 2005-11-11
  • 打赏
  • 举报
回复
protected对象是被继承者所继承的,但是不能被package以外的任何对象访问的.
所以this.a3能访问自身的a3,当想访问A类的实例的a3时无权限.
sunda 2005-11-11
  • 打赏
  • 举报
回复
protected:同一个类中,同一个包中,不同包中的子类
saint13 2005-11-11
  • 打赏
  • 举报
回复
那为什么m2()是正确的?
如果把m2()中的this.a3改成 new A11().a3也是正确的.
pdvv 2005-11-11
  • 打赏
  • 举报
回复
父类的protected部分,只有与父类在同一个包内的子类才能够访问。
pdvv 2005-11-11
  • 打赏
  • 举报
回复
儿子只有同老子在一间屋子里才可以翻老子的口袋。

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧