社区
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编译和运行时的工作原理就更好了,谢谢哈
...全文
133
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实在那是没听过.有错在讲.
给
菜鸟
看的Android应用开发全流程
给
菜鸟
看的Android应用开发全流程——好多Android开发中,没人告诉过你的事 很多
菜鸟
开始学习Android开发,去网上搜集过很多“Android开发教程”,但是搜索出来的东西,如果不是特别针对性的关键词,基本上内容都是:环境配置-工具安装-第一个Hel
Java的
继承
及
继承
中类的加载顺序
Java
继承
的概念 Java
继承
是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地
继承
父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。 JAVA不支持多重
继承
,单
继承
使JAVA的
继承
关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克
C++
继承
子类和父类修改情况
继承
可看作指针指向相同的作用域,但实例化对象后,各自的某个成员变量不相干。 #include<iostream> using namespace std; class Base { public: Base(int i=2) { x = i; } int x=10; }; class C :public Base { public: C() { cout << Base::x << endl; //2 cout << C::
产业园区运营负责人如何利用平台实现技术供需的精准对接?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
【T112017-教育生态与人才培养分会场】OpenDataOpenValue-数据科学合作研究平台的探索与实践-15页.pdf
【T112017-教育生态与人才培养分会场】OpenDataOpenValue-数据科学合作研究平台的探索与实践-15页.pdf
Java SE
62,622
社区成员
307,252
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章