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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 下雨天 中级黑马   /  2013-7-16 01:56  /  1613 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有段代码是关于多态的:
XT a=new XL();
System.out.println(a.name);
XT是父类,XL 继承了XT,我像上面那样产生一个对象  我感觉这个a对象是子类的对象 但为什么输出的是父类的name呢

9 个回复

正序浏览
多态里面   看你调用的应该是一个成员变量,
如果你是:            父类 对象名 = new 子类;
                          左边                       右边
这种形式写的话,返回的值应该是父类的变量值。

在多态中,调用成员变量,静态成员函数,他的内容都是参考引用变量所属的类。说直白点就是看左边。

非静态成员函数在调用时,看左边,就是看看父类有没有这个方法,有就通过,没有就编译失败,运行时看右边,就是实际上调用的是子类的方法,可以理解成子类覆盖父类方法。
回复 使用道具 举报
感谢分享
回复 使用道具 举报
你在子类中创建了对象a吗,如果没有的话,肯定就是继承的父类中的,子类中你有没有定义a 的属性呢?
回复 使用道具 举报
这里是多态了, 你这样想一天你穿着你爸爸的工作服走在你爸爸的岗位上,别人不认识你爸爸的人,看见你穿了你爸爸的工作服,是不是默认你就是你爸爸,把你爸爸的工作交给你做,不知道我这样比喻你看懂了没有
回复 使用道具 举报
应该是三楼说的那样,昨晚看think in java 刚好看到多态
回复 使用道具 举报
学习学习!
回复 使用道具 举报
如果出现你说的情况会不会在写XL类时用了super关键字,调用了父类的name
回复 使用道具 举报
楼主 为什么我实验了下,还是执行子类的方法? 我想看看你的完整代码。

你可以看下我的代码:
  1. package wenti;

  2. public class jicheng {
  3.         public static void main(String[] args){
  4.                 dongwu cat =new cat();
  5.                 cat.eat();
  6.         }
  7. }
  8. class dongwu{
  9.         public void eat(){
  10.                 System.out.println("dongwu eat");
  11.         };
  12.        
  13. }
  14. class cat extends dongwu{
  15.         public void eat(){
  16.                 System.out.println("cat eat fish");
  17.         };
  18. }
复制代码
回复 使用道具 举报
父类的对象,它的内容可以是这个父类的,也可以是它的子类的,当子类拥有和父类同样的函数,当使用这个对象调用这个函数的时候,定义这个对象的类(也就是父类)里的同名函数将被调用,当在父类里的这个函数前加virtual关键字,那么子类的同名函数将被调用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马