四小姐乖乖 2012-11-09 16:18
浏览 224
已采纳

一段小程序的疑问

[code="java"]

public class Father {
public static void main(String[] args) {
Father father=new Son();
System.out.println(father.a);
}
public Father(){
System.out.println("i am father");
}
public void read(){
System.out.println("father is reading");
}

}
class Son extends Father{
int a = 10;
public Son(){
System.out.println("i am son");
}
public void read(){
System.out.println("son is reading");
}
public void write(){
System.out.println("son is writing");
}
}

[/code]

这样一段代码,编译是不通过的,因为Main 方法中调用不到Son类中的成员变量a,但是删掉打印语句,用Debug调试的时候创建的father引用中是可以看到a的值的。为什么?请详细解释一下 最好能有个内存说明!

  • 写回答

3条回答 默认 最新

  • cpszgy 2012-11-09 17:08
    关注

    Father father=new Son();

    这句中的father只是一个引用。
    那么引用所指向的真正内存还是Son。
    你debug的时候显示的内容是内存里面的东西。
    那当然会有a。
    编译不通过是因为:
    这时候你已经向上转型了。那么转型后会丢失部分的类型信息。这里就是son中的a。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 武汉岩海低应变分析软件,导数据库里不显示波形图
  • ¥15 CreateBitmapFromWicBitmap内存释放问题。
  • ¥30 win c++ socket
  • ¥30 CanMv K210开发板实现功能
  • ¥15 C# datagridview 栏位进度
  • ¥15 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题