动态多态为什么不适用与静态方法

ldhscxl 2009-04-06 03:19:03
如下面一段代码:


class Polymorphic{
static void method(){
System.out.println("Parent Class");
}
}

class PolymorphicAndStatic extends Polymorphic{
static void method(){
System.out.println("subclass");
}
public static void main(String [] args){
Polymorphic poly = new PolymorphicAndStatic();
poly.method();
}
}


为什么只能调用到父类的方法,却不是调用到子类的方法。
...全文
115 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ldhscxl 2009-04-10
  • 打赏
  • 举报
回复
谢谢
real518 2009-04-06
  • 打赏
  • 举报
回复
父类对象引用子类实例,因为父类中有相同的方法,所以运行父类的方法,
这跟静态没关系的
IT农夫 2009-04-06
  • 打赏
  • 举报
回复
static方法是“类”方法,方法调用信息是在编译的时候就已经决定了的。
Polymorphic poly = new PolymorphicAndStatic();
poly的类类型是Polymorphic,编译的时候就定义了的。
poly.method();
这一句在编译的时候就决定了用Polymorphic的method方法。
breezes2008 2009-04-06
  • 打赏
  • 举报
回复
关注中
ZangXT 2009-04-06
  • 打赏
  • 举报
回复
static的东西跟多态没有关系。
batidb2 2009-04-06
  • 打赏
  • 举报
回复
根据我的理解,多态的实现主要是由于系统在调用方法时,是在调用的时候生成方法引用的,而如果是静态的方法,类一声成就有了引用的值了,那就是不是在调研的时候动态生成的。
例如:
class Polymorphic{
static void method(){
System.out.println("Parent Class");
}
}
如果是静态的,就已经有引用,而非静态的就还没有。

public static void main(String [] args){
Polymorphic poly = new PolymorphicAndStatic();
poly.method();
}
这时候,如果super的method是非静态的,此时就只生成了子类的方法引用,而没有父类的,所以结果就是子类的,才实现了多态。否则如果已经有了父类的(静态的有了引用),就不要子类的了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧