本帖最后由 sc6231565 于 2014-04-16 14:29:10 编辑

解决方案 »

  1.   


    1:你调用一个类的静态方法,不需要new 直接调用就可以。
    2:d的类型是Annimal,和你调用 Annimal .p()是一样的。
      

  2.   

    我大概了解楼主疑惑的地方了这句话是百度说的:  java静态方法能否重写?JAVA静态方法形式上可以重写,但从本质上来说不是JAVA的重写。因为静态方法只与类相关,不与具体实现相关,声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用)static方法不是后期绑定的,它在编译期就绑定了,换句话说,这个方法不会进行多态的判断。只与声明的类有关你吧Animal改成Dog试试
      

  3.   

    静态方法是不需要对象的。自然无法根据对象的类去覆盖方法.
    运行时是Animal.p() Dog.p()
      

  4.   

    一句话"非静态方法 按重写规则调用相应的类实现方法,而静态方法只与类相关。"
    Annimal d = new Dog();
    实现类是Dog,如果有非静态的方法,执行的是Dog这个实现类的东西.而静态方法,则执行当前调用类Annimal的东西.
      

  5.   

    把你认为是复写的方法上面加个@Override看看,就知道是不是复写了, 呵呵,显示错误是:错误: 方法不会覆盖或实现超类型的方法
      

  6.   

    这是哪本书上写的阿?
    java语言程序设计 基础篇