在继承中的 静态方法调用注意

   
      在继承中的 使用静态方法的时候该注意。。。。。
   你觉得下面程序很简单吧,打印出什么呢? 没看仔细要错的哦~!~

class Dog{
    
public static void bark(){
        System.out.println(
"Dog bark");
    }

}


class Basenji extends Dog{
    
public static void bark(){
        
    }

}


public class Test {
    
public static void main(String []args) throws Exception{
        Dog dog 
= new Dog();
        Dog basenji 
= new Basenji();
        dog.bark();
        basenji.bark();
        
    }

}


程序运行结果:
Dog bark
Dog bark

打印出2个Dog bark,额,原来对静态方法的调用不存在任何动态的分派机制。这个没有注意很容易搞错的哦~!!~

posted on 2009-04-15 19:15 胡鹏 阅读(452) 评论(6)  编辑  收藏 所属分类: java基础

评论

# re: 在继承中的 静态方法调用注意 2009-04-16 11:23 重庆理工小子

动态的分派机制
这是什么意思叱?

结果是错误的,只能打印一个!  回复  更多评论   

# re: 在继承中的 静态方法调用注意 2009-04-16 13:25 胡鹏

@重庆理工小子
如果 在方法中 public static void bark(), 把static都去掉, 那只是打印一个 Dog bark
  回复  更多评论   

# re: 在继承中的 静态方法调用注意 2009-04-16 17:15 重庆理工小子

即使不去掉也只能打印一个哈,思考!  回复  更多评论   

# re: 在继承中的 静态方法调用注意 2009-04-16 17:46 重庆理工小子

都去掉肯定是一个撒,而且,你把DOG中的bank方法去掉statac,结果应该还只是一个Dog bark;
如果你在DOG中,重新申明bank方法,即增加:System.out.println("XXXX");
这时候结果应该是:dog bark;
XXXX
子类没覆盖也没继承父类的static方法,因为static方法是无法继承的!  回复  更多评论   

# re: 在继承中的 静态方法调用注意 2009-10-19 16:33 管闲事

上面的结果只有一行,已经测试过。楼主搞错了。。。
Dog bark
  回复  更多评论   

# re: 在继承中的 静态方法调用注意[未登录] 2009-11-03 09:32 胡鹏

@管闲事
额,,跑出来是2个的哦。。 不知道您使用的哪个版本jdk?  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(3)

随笔分类

随笔档案

agile

搜索

最新评论

阅读排行榜

评论排行榜