社区
Java SE
帖子详情
菜鸟问题啊,关于继承的,请赐教咯
primer_of_java
2008-06-01 12:09:13
比如
Animals类里有eat();方法
wolf 类 extends Animals 这个类;
然后wolf里重写eat();方法
那么我Animals an = new wolf();
然后 an.eat(); 请问是调用父类还是子类的方法啊?
我看书上说的貌似是子类的方法.
如果能具体阐述下 父类类型的引用变量 被赋值 为一个子类的对象 时,JVM编译和运行时的工作原理就更好了,谢谢哈
...全文
89
12
打赏
收藏
菜鸟问题啊,关于继承的,请赐教咯
比如 Animals类里有eat();方法 wolf 类 extends Animals 这个类; 然后wolf里重写eat();方法 那么我Animals an = new wolf(); 然后 an.eat(); 请问是调用父类还是子类的方法啊? 我看书上说的貌似是子类的方法. 如果能具体阐述下 父类类型的引用变量 被赋值 为一个子类的对象 时,JVM编译和运行时的工作原理就更好了,谢谢哈
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
primer_of_java
2008-06-02
打赏
举报
回复
谢谢,又明白一个小知识点了,结贴去咯~~~
bxeldor_coder
2008-06-02
打赏
举报
回复
[Quote=引用 8 楼 primer_of_java 的回复:]
大致理解到了,恩恩
感觉 Animals an = new Wolf(); an.eat();
和 Wolf w = new Wolf(); w.eat();
效果都一样!
引用变量的类型对其没什么影响样
只是原理不一样,
比如前者以Animals作为引用变量的类型,那么在调用的时候检查到有重写的存在,在运行时会发生动态绑定,调用子类方法;
而后者以Wolf作为引用变量的类型,那么调用的时候就以Wolf类作为起点,然后找eat();方法,如果有就调用,如果没有,就去父类寻…
[/Quote]
不要简言之.
非简言之的很对
一将天下
2008-06-01
打赏
举报
回复
没有任何关系,只要父类里的方法是私有的子类就无法继承
primer_of_java
2008-06-01
打赏
举报
回复
1.如果eat方法在父类中是私有的,则调用父类中的eat方法
那么,如果父类中eat();是private 的话,我子类中再写个eat();方法,参数和返回类型等完全相等的情况下,他们2个方法有什么联系么???
brxonline
2008-06-01
打赏
举报
回复
1.如果eat方法在父类中是私有的,则调用父类中的eat方法
2.如果是发生重写,则在运行时会发生动态绑定,调用子类方法
tianqiss
2008-06-01
打赏
举报
回复
也
学习
liujiaqiid
2008-06-01
打赏
举报
回复
学习
primer_of_java
2008-06-01
打赏
举报
回复
大致理解到了,恩恩
感觉 Animals an = new Wolf(); an.eat();
和 Wolf w = new Wolf(); w.eat();
效果都一样!
引用变量的类型对其没什么影响样
只是原理不一样,
比如前者以Animals作为引用变量的类型,那么在调用的时候检查到有重写的存在,在运行时会发生动态绑定,调用子类方法;
而后者以Wolf作为引用变量的类型,那么调用的时候就以Wolf类作为起点,然后找eat();方法,如果有就调用,如果没有,就去父类寻找;
简而言之就是:
Animals开头的话,是从父类找;
Wolf开头的话,是从子类开始找;
不知道理解得对不对??
xian_hf
2008-06-01
打赏
举报
回复
如果能具体阐述下 父类类型的引用变量 被赋值 为一个子类的对象 时,JVM编译和运行时的工作原理就更好了
是这样的你父类在栈内开辟了一个父类引用,其实就是一个指针。但你new+构造()子类对象放在内存的哪里呢?
是在堆中,有这个子类对象的空间,以及他的属性空间和和指向方法区的引用。既然是一个实实在在的子类,那么调用的都
是子类的东西。至于楼上几位说的父类private方法,子类根本就继承不过去也就不存在什么重写,只是在子类写了一个和
父类方法名一样,返回类型一样,参数类型,数量一样的独立方法。和父类的那个方法无关。不知道lz是否明白一点了
bxeldor_coder
2008-06-01
打赏
举报
回复
[Quote=引用 2 楼 primer_of_java 的回复:]
1.如果eat方法在父类中是私有的,则调用父类中的eat方法
那么,如果父类中eat();是private 的话,我子类中再写个eat();方法,参数和返回类型等完全相等的情况下,他们2个方法有什么联系么???
[/Quote]
子类想和父类产生关系只有用super.
其中一种是super()构造函数(不写就默认)且自动调用它extends的那个父类的构造函数.
另一种就是super.父类的非私有东东.
子类影响父类,就不行了.儿子的基因变异是不会影响到他老爹的.
jason_kou
2008-06-01
打赏
举报
回复
[Quote=引用 4 楼 bx409027377 的回复:]
1.如果eat方法在父类中是私有的,则调用父类中的eat方法 ?????????这个没听过.而且你别妄想在其他类中(子类也不可以)调用人家类的私有东东.
2.如果是发生重写,则在运行时会发生动态绑定,调用子类方法.
但是注意,如果子类中没有没有重写eat方法,那就会调用父类的eat方法.
也既是决定了可以访问什么成员的是引用变量的类型,而不是它引用的对象的类型.也就是说将一个子类对象的引用赋给一个超类引用变量时,只可以访问有超类所定…
[/Quote]
bxeldor_coder
2008-06-01
打赏
举报
回复
1.如果eat方法在父类中是私有的,则调用父类中的eat方法 ?????????这个没听过.而且你别妄想在其他类中(子类也不可以)调用人家类的私有东东.
2.如果是发生重写,则在运行时会发生动态绑定,调用子类方法.
但是注意,如果子类中没有没有重写eat方法,那就会调用父类的eat方法.
也既是决定了可以访问什么成员的是引用变量的类型,而不是它引用的对象的类型.也就是说将一个子类对象的引用赋给一个超类引用变量时,只可以访问有超类所定义的那部分对象.
关于1实在那是没听过.有错在讲.
从
菜鸟
腾飞至专家(我的心得)
如果你还是一名
菜鸟
,或者你才接触程序不久,我建议你看下去. 对于程序员来说,不论你采用何种语言,那都是次要的,不论你开发的是桌面应用程序还是WEB应用程序,那也是次要的,好的思想胜于具体的语言,好的程序架构胜...
类Thread的三种方法:sleep(),join(),yield()
本人一介
菜鸟
, 如有
问题
, 望能
赐教
, 不胜感激!!!QQ:773839970 注明:海阔天空线程创建由两种方法,具体可参见《线程的创建》这篇文章在这两种方法中,推荐采用实现接口Runnable()的方法,因为子类若
继承
...
菜鸟
快速入门 struts 1.X (简单的登陆)第一篇
在 Web 层集成 stuts + Hibernate+ Spring ...
继承
...并
继承
... 实话实说,这是前段时间公司的一个哥们的老板让他快速入门SSH没办法了,我就写了一个简单的...希望各位大神们不惜
赐教
,共同见证
菜鸟
们的茁壮成长
一步一步学SAMBA
如何建立最简单的Samba服务器,并讲述遇到
问题
应该从何处寻找解决方案;正在更新之中,希望您的参加 ... ... 谢谢;目录0、架设Samba 服务器的前提;0.1 查看文件内容和编辑文件的工具;0.2 关于文件和目录相关;03 ...
angularjs学习第一天笔记
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,
请
多多指正,多多包涵我这个前端
菜鸟
,欢迎大家的点评与
赐教
。...
Java SE
62,612
社区成员
307,332
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章