package com.yongan.test;public class C {
protected int i=2012;}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 不能通过对象实例访问?求解!谢谢!
解决方案 »
- servlet.service() for servlet action threw exception,错误找不到,急
- 整了一个上午的排序问题,希望前辈给予一下解答
- java link access 可以像其它DB一样指定ip ,端口号吗?
- jsp 连接数据库出错?请大家帮忙一下》
- 求助:关于Printstream和Printwriter
- java 方法返回值
- 求解一个文件换行问题
- 谁能告诉我这些都是什么?
- 请问如何捣乱.class文件,使得反编译器对他失去作用?
- StringTokenizer无法分割换行符是怎么回事
- 请教Java中的数组排序是那个语法?
- 求高手帮忙解答二维数组对象的问题!
package com.yongan;
import com.yongan.test.C;public class D extends C{ public static void main(String[] args) {
C c=new D();
System.out.println(c.i); //这里有红色波浪线,就不解释了
D d=(D)c;
System.out.println(d.i);
}}
override clone()?
向上转型
c实际上指向的是一个子类对象 c.i 与d.i应该都能访问
楼主自己好好调试下!
C c=new D();
c中有属性 i
调用c.i是不能通过编绎的
而当我 D d=(c)c 强制转换后,能通过 d.i访问变量!这其中的原因不太明白!
protected int i=2012;}package Try;import Try.C;public class D extends C{ public static void main(String[] args) { C c = new D();
System.out.println(c.i);
// c.i 是不能访问的
D d = (D) c;
/*
D dd=new D();
System.out.println(dd.i);
*/
System.out.println(d.i);
// d.i 是可以访问的
System.out.println(c == d); // 打印引用地址为true }}
楼主不是同一个包
关于这个问题有人解释了
而我只表示记住了,保存了http://blog.csdn.net/hongyuan19/article/details/1946636
C c=new D();
System.out.println(c.i);
是在包外新建的C类对象,在包外没有访问权限!