菜鸟问题啊,关于继承的,请赐教咯

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 打赏 收藏 转发到动态 举报
写回复
用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实在那是没听过.有错在讲.

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧