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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© I空空 中级黑马   /  2014-12-26 23:32  /  2026 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态方法在多态中,编译和运行是什么样的情况啊,总是搞不清楚,求大神指点

6 个回复

倒序浏览
Java中对成员变量和静态方法的调用是采用静态绑定的,也就是在编译时期就选择好了,是根据引用被声明的类型来决定。而对非静态方法的调用,是采用动态绑定的,编译时先看父类中是否有调用的方法,有,通过,在运行时判断子类是否有调用的方法,有,就运行,正是这实现了多态。
总结来说:成员变量和静态函数在多态调用时,无论编译和运行,都参考做左边;非静态函数在多态调用时,编译看左边,运行看右边。
个人理解,不对请指正。
回复 使用道具 举报
静态方法属于类的方法。成员方法是对象的方法。
class A{
public void open(){}//普通方法
public static void close(){}//静态方法
}

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

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

头像好赞
回复 使用道具 举报
这么说吧  静态是不存在多态的,多态是以对象为基础的,静态成员 属于类不属于对象,所以不要纠结这个问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马