发布网友 发布时间:2022-04-25 06:14
共4个回答
热心网友 时间:2023-11-02 07:54
可以肯定,这个程序一定报错,如楼主所说:“The field clone1.name is not visible”,也就是说这个区域中的name这个属性是不可见的。
因为protected属于受保护的访问权限,一个类中的成员如果使用了protected访问权限,则只能被本包及不同包的子类访问。
很显然你的两个类不在同一个包,就因该用子类的实例对象访问,而你却在包含子类的包中中实例化了父类对象,你可能在想,我明明是在子类中实例化了父类对象,我要访问我自己的成员还不行吗?。。可你要想清楚,你的父类并不在这个包。(这时你在子类的包中用父类的实例化对象访问用protected修饰的属性,它压根就找不到,所以会报出不可见的错误)所以你必须用Clone2 c = new Clone2();c.name;或是用匿名对象
new Clone2().name;(其实是子类的一个匿名对象)访问。
热心网友 时间:2023-11-02 07:54
难道你没发现你的子类跟父类不再同一个包中吗
热心网友 时间:2023-11-02 07:54
你确定你那里不可能运行吗,我帮你试了下,不报错,结果为clone1
如果是用protected修饰的话,它的子类或父类,只要有继承父系的都可以访问。。。
热心网友 时间:2023-11-02 07:55
public 公共变量 在整个程序运行过程中都管用,类外部也可以通过新建一个对象访问(new clone1().name)
private是私有变量的意思 只有类内可直接访问
protected是受保护变量 类内和子类直接访问。注意是类内可直接访问,新建的实例不能直接访问。即不能通过new clone1.name访问,但是可以通过new Clone2().name访问。
参考资料:http://zhidao.baidu.com/question/88298487.html?si=1