黑马程序员技术交流社区

标题: 关于多态的问题 [打印本页]

作者: 康大玮    时间: 2012-5-22 22:42
标题: 关于多态的问题
毕老师的这句话”成员函数在多态调用时,编译看左边,运行看右边。“怎么理解?
作者: 陈嘉宾    时间: 2012-5-22 22:44
在多态中,成员变量的特点:
无论编译和运行,都参与左边
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。
作者: 蒋映辉    时间: 2012-5-22 22:50
http://bbs.itheima.com/thread-15229-1-1.html
建议楼主看看这个帖子
作者: 袁梦希    时间: 2012-5-23 00:37
本帖最后由 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为袁梦希,,我会继承黑马的传统美德。

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


作者: 林豪    时间: 2012-5-23 01:55
编译器在编译时候只看=号左边的代码,在看右边的代码符不符合规范,所以右边代码只有到了运行的时候才会知道,那么在编译的时候就看左边的代码,然后你下面用的是右边的方法,那么编译器就会无法识别那个方法,因为编译器没有去读右边
作者: 8161776    时间: 2012-5-23 07:34
毕老师的这句话”成员函数在多态调用时,编译看左边,运行看右边。“怎么理解?

可以这么理解,多态不就是把子类的实体对象赋给一个父类的引用吗?编译的时候如果父类没有你调用的此方法或者属性的时候就会报错,
所以说编译的时候看左边,左边的意思就是父类,真正运行的时候都是用的子类重写后的方法,或者属性,所以说运行的时候看右边,也就是子类

作者: 张泽    时间: 2012-5-23 07:55
本帖最后由 张泽 于 2012-5-23 07:56 编辑

成员函数在多态调用时,编译看左边,运行看右边。我这样理解,编译就是政审,看你背景是否属实清白;运行则是你自己参加工作。呵呵!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2