黑马程序员技术交流社区

标题: 多态中的静态方法 [打印本页]

作者: I空空    时间: 2014-12-26 23:32
标题: 多态中的静态方法
静态方法在多态中,编译和运行是什么样的情况啊,总是搞不清楚,求大神指点

作者: 月老~牵红线    时间: 2014-12-27 09:59
Java中对成员变量和静态方法的调用是采用静态绑定的,也就是在编译时期就选择好了,是根据引用被声明的类型来决定。而对非静态方法的调用,是采用动态绑定的,编译时先看父类中是否有调用的方法,有,通过,在运行时判断子类是否有调用的方法,有,就运行,正是这实现了多态。
总结来说:成员变量和静态函数在多态调用时,无论编译和运行,都参考做左边;非静态函数在多态调用时,编译看左边,运行看右边。
个人理解,不对请指正。
作者: 小僧玄奘    时间: 2014-12-27 10:44
静态方法属于类的方法。成员方法是对象的方法。
class A{
public void open(){}//普通方法
public static void close(){}//静态方法
}

A a= new A();
   a.open();   这个open方法是a对象的。你再new一个b 去调用open(),那也是b对象的方法

而static close()此静态方法在类new的时候只执行一次
作者: chenshiji    时间: 2014-12-27 19:34
楼主问题比较笼统,能否描述清楚些?
作者: 只会金克斯    时间: 2014-12-27 21:39
就只是按照楼主的提问来讲。
1.先明白多态的前提是什么:
    1)有继承关系  2)子类重写父类方法   3)父类引用指向子类对象
2.了解静态方法
    静态方法优先于对象存在,随着类的加载而加载
这样就是说 静态方法其实是不会有多态行为的,因为静态方法是优先于对象存在的,在还没有创建子类对象的时候就存在了,而且可以通过类名直接调用。
如果要重写静态方法,那也只能被静态方法重写。。
个人见解
作者: 找寻小龙猫    时间: 2014-12-28 02:25
月老~牵红线 发表于 2014-12-27 09:59
Java中对成员变量和静态方法的调用是采用静态绑定的,也就是在编译时期就选择好了,是根据引用被声明的类型 ...

头像好赞
作者: wf111sxwf    时间: 2014-12-28 17:30
这么说吧  静态是不存在多态的,多态是以对象为基础的,静态成员 属于类不属于对象,所以不要纠结这个问题




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