java 向上继承_java,继承_java继承中,为什么向上转型后无法运行子类中特有的方法?,java,继承,向上转型 - phpStudy...

java继承中,为什么向上转型后无法运行子类中特有的方法?

看了这篇文章:

https://www.ibm.com/developerworks/cn/java/j-lo-polymorph/

有一些疑问。

class Person {

public String toString(){

return "I'm a person.";

}

public void eat(){}

public void speak(){}

}

class Boy extends Person{

public String toString(){

return "I'm a boy";

}

public void speak(){}

public void fight(){}

}

class Girl extends Person{

public String toString(){

return "I'm a girl";

}

public void speak(){}

public void sing(){}

}

//最后这么用的话,

Person girl = new Girl();

girl.speak();

按照作者的说法,girl引用变量指向堆中的 Girl对象,所以运行的时候知道当前对象是Girl对象,找Girl的方法表,

找到后执行。这对于speak方法来说是行得通的。

但是如果这样呢:

girl.sing();

按照作者的说法,去Girl方法表找到sing方法,然后执行。

实际情况大家都知道有错误,编译不通过。

这中间肯定漏了点我不知道的什么?希望可以赐教。

换个方式问也就是:

当发生向上转型的时候,栈和堆中分别发生了什么?

相关阅读:

关于go语言获取远程包的一个小疑问?

ms-dos 命令中的:冒号是用来干么的?

grunt-contrib-connect其他设备访问问题

backbone 如何处理登录页面

这种类似Tab的布局在Python2.7-PyQt4中是如何实现的?

如何使用grunt将less打包成一个文件?

非标准json格式解析的问题

刚学Map容器,联系键与值的联系,但程序中关于freq++ 产生了疑问

checkbox 对齐问题

ios移动端浏览器 滚动时停止js运行,以及css3动画

感觉编程中总是会弄混一些符号,比如斜杠和反斜杠。

关于mysqlcluster集群里memcached同步的问题

android项目目录下总是自动生成 .d 文件

如何将文本中的数据存储到结构数组中?

phantomjs 最新版2.1.1 windows和linux版本不一致

Ebean 使用 setDistinct() 查询的问题

android的 mediaPlayer 暂停后,再start为何重新播放了

为什么 React 的 virtual DOM 比原生的DOM 渲染性能更好?

用React+flux 做开发,ajax是写在哪里好?

php爬虫链接池和链接调度怎么写?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值