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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 康大玮 中级黑马   /  2012-5-22 22:42  /  2510 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕老师的这句话”成员函数在多态调用时,编译看左边,运行看右边。“怎么理解?

6 个回复

倒序浏览
在多态中,成员变量的特点:
无论编译和运行,都参与左边
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。
回复 使用道具 举报
http://bbs.itheima.com/thread-15229-1-1.html
建议楼主看看这个帖子
回复 使用道具 举报
本帖最后由 yuan 于 2012-5-23 00:53 编辑

//楼主你好,我先给你举个最最经典的子父之间的例子,你懂的
class Fu
{
int num = 10;
void show()
{
  System.out.println("Fu show");
}
static void method()
{
  System.out.println("Fu static method");
}
}
class  Zi extends Fu
{
int num = 20;
void show()
{
  System.out.println("Zi show");
}
static void method()
{
  System.out.println("Zi static method");
}
}
class DuoTaiDemo3
{
public static void main(String[] args)
{
  Fu f = new Zi();
//用父类对象调用成员变量
System.out.println(f.num);
//用父类对象调用非静态方法
f.show();
//用父类对象调用静态方法
f.method();
    }
}
               /*
                      Fu f = new zi();
                      左边       右边


                 
总结:1.成员变量
                             编译:看左边的引用类型中是否有此成员变量
                             运行:也是看左边的变量的值

                             简而言之:编译和运行都看左边。
                           
                           2.非静态方法
                              编译:看左边引用型中是否有此方法
                              运行:看右边是否重写过此方法。如果没有,执行左边,如果有,执行右边。
                              简而言之:编译看左边,运行看右边。

                           3. 静态方法
                              编译:看左边引用型中是否有此方法
                              运行:看左边引用型中是否有此方法
                              简而言之:编译和运行都看左边。

                                                                                                      */

                        备注:    我调用了的老师上课讲的话,顺便也指向毕老师的一段话,如果你这再不哦,我也没办法让你哦了。{:soso_e100:}
                                       如果管理访问了,麻烦让我实现一下接口,把我的用户名set为袁梦希,,我会继承黑马的传统美德。

                  
                         最后  :  不开玩笑了,希望我的回答能够帮助楼主解决问题。

评分

参与人数 1黑马币 +1 收起 理由
李斌 + 1 赞一个!

查看全部评分

回复 使用道具 举报
编译器在编译时候只看=号左边的代码,在看右边的代码符不符合规范,所以右边代码只有到了运行的时候才会知道,那么在编译的时候就看左边的代码,然后你下面用的是右边的方法,那么编译器就会无法识别那个方法,因为编译器没有去读右边
回复 使用道具 举报
毕老师的这句话”成员函数在多态调用时,编译看左边,运行看右边。“怎么理解?

可以这么理解,多态不就是把子类的实体对象赋给一个父类的引用吗?编译的时候如果父类没有你调用的此方法或者属性的时候就会报错,
所以说编译的时候看左边,左边的意思就是父类,真正运行的时候都是用的子类重写后的方法,或者属性,所以说运行的时候看右边,也就是子类
回复 使用道具 举报
张泽 初级黑马 2012-5-23 07:55:21
7#
本帖最后由 张泽 于 2012-5-23 07:56 编辑

成员函数在多态调用时,编译看左边,运行看右边。我这样理解,编译就是政审,看你背景是否属实清白;运行则是你自己参加工作。呵呵!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马