- Java code
package com.yongan.test;public class C { protected int i=2012;}
- Java code
package com.yongan;import com.yongan.test.C;public class D extends C { public static void main(String[] args) { C c=new D(); // c.i 是不能访问的 D d=(D)c; // d.i 是可以访问的 System.out.println(c == d); // 打印引用地址为true }}
我想既然内存地址一样的话,就应该可以用c.i访问呀!
难道就因为向上转型后,protected 不能通过对象实例访问?
求解!谢谢!
------解决方案--------------------------------------------------------
我也想听听
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
你override类的equals方法和hashcode方法试试,再比较下看看
------解决方案--------------------------------------------------------
你确定d.i的时候不会报错 要不你再试试
------解决方案--------------------------------------------------------
protected只是指其对子类对见,所以你才能调用d.i;但这并不代表c.i可在D类中访问,能否在D类中访问要看i在C类的访问权限,很不幸除了public其它修饰符都不能让该变量在包外可见。如果你C,D类是同一个包就没问题了。
------解决方案--------------------------------------------------------
哪有问题、、?
------解决方案--------------------------------------------------------
才看见,你好歹把俩类放在一个包里,就可以访问了
------解决方案--------------------------------------------------------
C c=new D();
c就是一个指针,指向D(虚拟机分配的一块小内存。)
你用c给d赋值,结果是d也指向这快内存空间。
因为c,d指向同一个内存空间,所以会返回true即用 "=="就行。
如果想用equals 你就得比较就不是比较c,d是否指向同那块小小地盘。
用equals是找到c,d分别指向哪个地址,比较这俩地址的内容是否相同。
------解决方案--------------------------------------------------------
C c=new D();
向上转型
c实际上指向的是一个子类对象
c.i 与d.i应该都能访问
楼主自己好好调试下!
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
protected 访问权限是:本包 和 子类。
(1):D类和C类没有在同一包下 ,故不能直接用c.i 访问。 如果i是public权限则可以如此访问,或者把
两个类放到同一包下。
(2):d.i可以访问的原因是D是C的子类,故有权限访问。(是继承下来得)
------解决方案--------------------------------------------------------
sorry 我看错了
楼主不是同一个包
关于这个问题有人解释了
而我只表示记住了,保存了
http://blog.csdn.net/hongyuan19/article/details/1946636
------解决方案--------------------------------------------------------