为什么父类的静态方法没有被重写?

Magical茏 2014-04-16 02:27:10
package mu;


class test
{
public static void main(String[] args)
{
Annimal a = new Annimal();
Annimal d = new Dog();
a.p();
d.p();

}
}

class Annimal {
static void p() {
System.out.println("wow");
}
}

class Dog extends Annimal {
static void p() {
System.out.println("WOWOW");
}
}


输出:
wow
wow

刚学习java不久,谁能解释下为什么父类的静态方法没有被重写?
感觉这类知识比较偏,对于学习是否有意义呢?
...全文
633 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyilack_小小黑 2014-04-18
  • 打赏
  • 举报
回复
引用 12 楼 sc6231565 的回复:
[quote=引用 11 楼 u014520745 的回复:] 与实例方法一样,静态方法也能被继承。但是,静态方法不能被重写。如果父类中定义的静态方法在子类中被重新定义,那么定义在父类中的静态方法将被隐藏。可以使用语法:父类名.静态方法名调用隐藏的静态方法 上面是书上写的
这是哪本书上写的阿?[/quote] java语言程序设计 基础篇
小张hold 2014-04-17
  • 打赏
  • 举报
回复
子类不可以直接重写父类的静态方法,但在子类中可以声明与父类静态方法相同的方法,从而将父类的静态方法隐藏。
Magical茏 2014-04-17
  • 打赏
  • 举报
回复
引用 11 楼 u014520745 的回复:
与实例方法一样,静态方法也能被继承。但是,静态方法不能被重写。如果父类中定义的静态方法在子类中被重新定义,那么定义在父类中的静态方法将被隐藏。可以使用语法:父类名.静态方法名调用隐藏的静态方法 上面是书上写的
这是哪本书上写的阿?
tyilack_小小黑 2014-04-16
  • 打赏
  • 举报
回复
与实例方法一样,静态方法也能被继承。但是,静态方法不能被重写。如果父类中定义的静态方法在子类中被重新定义,那么定义在父类中的静态方法将被隐藏。可以使用语法:父类名.静态方法名调用隐藏的静态方法 上面是书上写的
ququ9696 2014-04-16
  • 打赏
  • 举报
回复
把你认为是复写的方法上面加个@Override看看,就知道是不是复写了, 呵呵,显示错误是:错误: 方法不会覆盖或实现超类型的方法
momoyssy 2014-04-16
  • 打赏
  • 举报
回复
一句话"非静态方法 按重写规则调用相应的类实现方法,而静态方法只与类相关。" Annimal d = new Dog(); 实现类是Dog,如果有非静态的方法,执行的是Dog这个实现类的东西.而静态方法,则执行当前调用类Annimal的东西.
知风23_ 2014-04-16
  • 打赏
  • 举报
回复
换句话说静态方法是在加载时就被加载到内存中的方法,在整个运行过程中保持不变
lliiqiang 2014-04-16
  • 打赏
  • 举报
回复
静态方法是不需要对象的。自然无法根据对象的类去覆盖方法. 运行时是Animal.p() Dog.p()
Magical茏 2014-04-16
  • 打赏
  • 举报
回复
引用 4 楼 alan19931103 的回复:
我大概了解楼主疑惑的地方了 这句话是百度说的: java静态方法能否重写?JAVA静态方法形式上可以重写,但从本质上来说不是JAVA的重写。因为静态方法只与类相关,不与具体实现相关,声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用) static方法不是后期绑定的,它在编译期就绑定了,换句话说,这个方法不会进行多态的判断。只与声明的类有关 你吧Animal改成Dog试试
哈哈,这样说,好理解了些.
yueyuexiong 2014-04-16
  • 打赏
  • 举报
回复
d的声明,或者向下强转也可以
alan19931103 2014-04-16
  • 打赏
  • 举报
回复
我大概了解楼主疑惑的地方了 这句话是百度说的: java静态方法能否重写?JAVA静态方法形式上可以重写,但从本质上来说不是JAVA的重写。因为静态方法只与类相关,不与具体实现相关,声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用) static方法不是后期绑定的,它在编译期就绑定了,换句话说,这个方法不会进行多态的判断。只与声明的类有关 你吧Animal改成Dog试试
Kenzson 2014-04-16
  • 打赏
  • 举报
回复
静态方法无需实例化对象
卡卡吉利 2014-04-16
  • 打赏
  • 举报
回复
static改为public
huoxu 2014-04-16
  • 打赏
  • 举报
回复
1:你调用一个类的静态方法,不需要new 直接调用就可以。 2:d的类型是Annimal,和你调用 Annimal .p()是一样的。

62,614

社区成员

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

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