多态不太明白!求解。

wonkju 2012-10-16 01:37:30
因为static方法不能被重写,因为有人说如果重写 了就不存在多态了,
然后我不太理解的是,这和多态有什么关系呢?
难道这与对象和类有关系?
大神帮忙解释解释!!!谢谢咯
...全文
127 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxiaofei 2012-10-16
  • 打赏
  • 举报
回复
楼上:我知道你是什么意思了
龙四 2012-10-16
  • 打赏
  • 举报
回复

class P {
public void instanceMethod() {
System.out.println("P类中的instanceMethod");
}

public static void staticMethod() {
System.out.println("P类中的staticMethod");
}
}

class S extends P {
public void instanceMethod() {
System.out.println("S类中的instanceMethod");
}

public static void staticMethod() {
System.out.println("S类中的staticMethod");
}
}
public class Test {
public static void main(String[] args) {
P instance = new S();
instance.instanceMethod();
instance.staticMethod();
}
}


如上面这段代码,instance.instanceMethod();调用的是S类中的方法,而instance.staticMethod();调用的是P中的方法,前者就是因为多态的缘故
龙四 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

所以不太明白你说的“不能被重写”是指的什么。能透露一下这个“不能重写”的说法是在哪里看到的不?大家可以找到这个原始说法,然后进行讨论
[/Quote]
重写就是覆盖、就是Override,而静态方法只能隐藏父类静态方法


[Quote=引用 0 楼 的回复:]
如果重写 了就不存在多态了
[/Quote]

我是这么说的:“能被重写就意味着存在多态调用,而static方法属于类,无法多态
a8509190 2012-10-16
  • 打赏
  • 举报
回复
static是和对象本身没什么关系的,因为一加载类就会运行的
huangxiaofei 2012-10-16
  • 打赏
  • 举报
回复
首先,重写类的static方法在语法上没有问题:

class Base{
public static void foo(){
System.out.println("this is a foo");
}
}

public class Static extends Base{
public static void foo(){
System.out.println("this is a static foo");
}

public static void main(String[] args){
Base staticIns = new Static();
staticIns.foo();
Static staticIns2 = (Static)staticIns;
staticIns2.foo();
}
}

上述代码编译通过是没有问题的,而且也体现了多态
所以不太明白你说的“不能被重写”是指的什么。能透露一下这个“不能重写”的说法是在哪里看到的不?大家可以找到这个原始说法,然后进行讨论

62,620

社区成员

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

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