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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马如龙 中级黑马   /  2014-6-11 20:54  /  1094 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。


这里的左边 和 右边  你是怎么理解的?子类父类之间调用遵循 什么原则

3 个回复

倒序浏览
编译看左边,运行看右边这句话是为了使我们记住,在使用多肽是要按照原则去调用方法,和编写类型。
例如:
  1. class fu{
  2.   function1(){}
  3.   function2(){}
  4. }

  5. class extends Zi{
  6.   function3(){}
  7. }
复制代码

对于Fu fu = new Zi();
我理解的编译看左边的意思是,当某个类中调用了fu.function3(),它编译时可以通过的。
运行看右边的意思是,当真正运行起这个类的实例时fu.function3(),它是会出错的。
这就是我的理解,不正确请指正。

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
这里的左边和右边,是指我们创建对象时,等号左边和等号右边代码。
eg:
                Fu f = new Fu();//  Fu f      父类引用  , new Fu();  父类对象
                 
                Zi z = new Zi();//  Zi z      子类引用  ,  new Zi(); 子类对象
                                       
                Fu f = new Zi();      父类引用指向子类对象。

如上例所示:
      假如有Fu和Zi两个类,同时子类继承父类   
     
       Fu f = new Zi();   对象在创建时,如Zi类拥有特有的方法则此时编译时无法通过的,因为父类引用指向了子类对象,在对象初始化时,子类有自己特有方法,父类没有改方法,父类的引用是无法实现的
     此时如果想调用子类方法,则需要对父类对象进行向下转型,
     Zi z = (Zi)f;   向下转型 后,父类对象被转成子类对象,转型后可以调用子类特有方法
   
  希望能帮到你!



评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
江夷 发表于 2014-6-11 21:09
这里的左边和右边,是指我们创建对象时,等号左边和等号右边代码。
eg:
                Fu f = new Fu();//  Fu f       ...

谢谢 , 这样理解太好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马