A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© clh 中级黑马   /  2014-9-11 02:30  /  1530 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 clh 于 2014-9-11 11:26 编辑
  1. class A {
  2.     void fun1() {
  3.               System.out.println(fun2());
  4.         }
  5.         int fun2() {
  6.                 System.out.println("a");
  7.                 return 0;
  8.         }
  9. }
  10. public class B extends A {
  11.         int fun2() {        
  12.                 System.out.println("b");
  13.                 return 0;
  14.          }
  15. public static void main(String args[]) {
  16.                                  B b = new B();
  17.                 b.fun1();
  18.                 A a = b;
  19.                 a.fun1();
  20.                 a.fun2();
  21.                
  22.         }
  23. }
复制代码
运行结果:
  1. b
  2. 456
  3. b
  4. 456
  5. b
复制代码

最后一句,我没有做向下转型,这样也是可以么,按照b老师的视频,
  1. a.fun2();
复制代码
谁能讲讲其中区别



13 个回复

倒序浏览
类B在何方?如果test08是类B,那在我这输出结果为:b 0 b 0 b
回复 使用道具 举报
如果你的Test08是类B的话,不需要作向下转型,
因为子类和父类都有fun2()方法,子类的方法会覆盖父类的方法;
只有调用子类特有方法时才需要向下转型。
回复 使用道具 举报
雪碧拌米饭 发表于 2014-9-11 03:23
类B在何方?如果test08是类B,那在我这输出结果为:b 0 b 0 b

对对,你说的是对的,我复制的时候改了点东西,,就想问下这样就不用向下转型 了么
回复 使用道具 举报
luofeng 发表于 2014-9-11 04:32
如果你的Test08是类B的话,不需要作向下转型,
因为子类和父类都有fun2()方法,子类的方法会覆盖父类的方法 ...

我详细问下哈,a.fun2()是直接调用的子类的方法,
还是调用的是父类方法,不过被子类覆盖了,

A a = new B();
B b= newB();
之间有什么实质的区别
回复 使用道具 举报
话说没找到B类
回复 使用道具 举报
clh 中级黑马 2014-9-11 11:25:57
7#

就是Test08
,没改过来
回复 使用道具 举报
clh 发表于 2014-9-11 11:03
我详细问下哈,a.fun2()是直接调用的子类的方法,
还是调用的是父类方法,不过被子类覆盖了,

因为它是父类的引用,所以会先在父类中找a.fun2()方法,只有父类中有该方法编译才不会出错,然后执行时,子类方法将父类覆盖了。
A a = new B();
B b= newB();
中a调用的方法必须在A中存在,不能调用B的特有方法;
b可以调用B的特有方法。
回复 使用道具 举报
clh 中级黑马 2014-9-11 20:06:09
9#
luofeng 发表于 2014-9-11 18:07
因为它是父类的引用,所以会先在父类中找a.fun2()方法,只有父类中有该方法编译才不会出错,然后执行时, ...

懂了,谢谢,真的瞬间明白了很多啊,你是不是有基础的啊,你准备报第几期
回复 使用道具 举报
多态的问题,运行时只有子类重写父类方法的时候运行子类的,其他都运行父类的。
回复 使用道具 举报
clh 中级黑马 2014-9-11 21:57:44
11#
进击的大鹏 发表于 2014-9-11 21:00
多态的问题,运行时只有子类重写父类方法的时候运行子类的,其他都运行父类的。 ...

恩。。。。。。。。。
回复 使用道具 举报
clh 发表于 2014-9-11 20:06
懂了,谢谢,真的瞬间明白了很多啊,你是不是有基础的啊,你准备报第几期 ...

我本来准备报46期的,不过视频还没学完,技术分也刚开始攒,不知赶上赶不上,还要多多努力,一起加油吧。
回复 使用道具 举报
zhuohong_xiao 来自手机 中级黑马 2014-9-12 02:50:42
13#
clh 发表于 2014-9-11 11:03
我详细问下哈,a.fun2()是直接调用的子类的方法,
还是调用的是父类方法,不过被子类覆盖了,


多态啊。
回复 使用道具 举报
clh 中级黑马 2014-9-12 10:49:01
14#

en ,懂点了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马