java的访问权限问题

这是一个类:
package July;

public class clone1 {
protected String name="clone1";
}
这是另一个类:
package clone;

import July.clone1;

public class Clone2 extends clone1{
public static void main(String[] args) {
clone1 c = new clone1();
System.out.println(c.name);//此处报错:The field clone1.name is not visible
}
public void print() {
System.out.println(name);
}
}
请问这是为什么报错呢?
protected的属性在子类可以直接访问,为什么new一个对象不能访问它的属性呢?起到高手回答。谢谢

可以肯定,这个程序一定报错,如楼主所说:“The field clone1.name is not visible”,也就是说这个区域中的name这个属性是不可见的。

因为protected属于受保护的访问权限,一个类中的成员如果使用了protected访问权限,则只能被本包及不同包的子类访问。

很显然你的两个类不在同一个包,就因该用子类的实例对象访问,而你却在包含子类的包中中实例化了父类对象,你可能在想,我明明是在子类中实例化了父类对象,我要访问我自己的成员还不行吗?。。可你要想清楚,你的父类并不在这个包。(这时你在子类的包中用父类的实例化对象访问用protected修饰的属性,它压根就找不到,所以会报出不可见的错误)所以你必须用Clone2 c = new Clone2();c.name;或是用匿名对象
new Clone2().name;(其实是子类的一个匿名对象)访问。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-11
难道你没发现你的子类跟父类不再同一个包中吗
第2个回答  2010-07-11
你确定你那里不可能运行吗,我帮你试了下,不报错,结果为clone1
如果是用protected修饰的话,它的子类或父类,只要有继承父系的都可以访问。。。
第3个回答  2010-07-11
public 公共变量 在整个程序运行过程中都管用,类外部也可以通过新建一个对象访问(new clone1().name)
private是私有变量的意思 只有类内可直接访问
protected是受保护变量 类内和子类直接访问。注意是类内可直接访问,新建的实例不能直接访问。即不能通过new clone1.name访问,但是可以通过new Clone2().name访问。

参考资料:http://zhidao.baidu.com/question/88298487.html?si=1

相似回答