Static 方法是否可以被重写

dengfangping 2007-05-22 03:09:22
Class Base{

public static void stamethod(){
System.out.print("Base");

}


}

public class ItsOver extends Base{

public static void main(String[] args)
{

ItsOver so = new ItsOver();
so.stamethod();


}
public static void stamethod(){


System.out.print("aMethod in staOver");


}
}

这个我认为是Static被重写了,但是做过SCJP的考卷,答案是Static方法不可以被重写,不懂,希高人指点。



...全文
1598 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yutong1984 2007-05-23
  • 打赏
  • 举报
回复
这个应该不是重写和覆盖 static方法是属于类的方法 而不是属于对象
congou 2007-05-23
  • 打赏
  • 举报
回复
方法重写:在类层次中,当一个子类中的方法与其超类中的方法具有同样的名称和类型声明时称子类中的方法重写了超类中的方法,从子类中调用重写方法时,它总是引用由该子类定义的方法,而超类中定义的同名同类型方法将被隐藏,要访问被重写的超类版本,可以通过super来做到这一点

方法重载:如果两个方法同名不同类型,那么两个方法就是重载了
congou 2007-05-23
  • 打赏
  • 举报
回复
超类变量可以引用子类对象,可以为超类的引用变量赋予一个到该超类所派生的任何子类的引用
也就是说,将一个子类对象的引用赋给一个超类的引用变量时,只可以访问又超类所定义的那不分对象,因为超类不知道一个子类添加了什么
fengyun5d 2007-05-23
  • 打赏
  • 举报
回复
本来想写一个测试方法,可惜让tomkai(我不是苹果) 抢先了。我不是苹果的这个例子很好的测试了static 方法是不能被子类所覆盖的。多态是覆盖的表现。
healer_kx 2007-05-23
  • 打赏
  • 举报
回复
加Hook
jishuaige 2007-05-22
  • 打赏
  • 举报
回复
tomkai:你好!
你写的关于的重载的问题,通过看了你的那个方法我基本上明白了啊!谢谢!
但是我还有一个问题:Father son1 = new Son();//声明为Father类,son1静态方法和Father类绑

向上转型还有什么别的好处吗?
hudingchen 2007-05-22
  • 打赏
  • 举报
回复
重载方法:通过在同一个类中用相同的名字定义多个方法,来重载方法。jvm是根据参数数量和参数类型来判断调用哪个方法,但不可以用返回值来区分。
dengfangping 2007-05-22
  • 打赏
  • 举报
回复
我总结一下上面说说的:

重写:只有继承了父类的,才可以。 它具有以下特点:

1.参数列表必须与被重写的方法参数列表一致。
2.返回类型必须与方法中的返回类型一致。
3.访问级别的 限制不可以比父类中的强。(可以比他弱)
重载:
在同一一个类中,参数与返回的只不同,方法名相同。
静态的:

由于静态的在内存空间只有一份,所有不可以被重写.
以上写的不知道大家是否满意。
由空加376140058,讨论Java
tomkai 2007-05-22
  • 打赏
  • 举报
回复
看了,这么多,部分清楚,可否有好手把覆盖,重载,重写具体的说一下啊。

=========
汗...这些内容你应该去查书.

就你提出的问题来说...静态方法可以被子类隐藏
allenblade 2007-05-22
  • 打赏
  • 举报
回复
顶一个~~写得很清楚~~
dengfangping 2007-05-22
  • 打赏
  • 举报
回复
看了,这么多,部分清楚,可否有好手把覆盖,重载,重写具体的说一下啊。
「已注销」 2007-05-22
  • 打赏
  • 举报
回复
同意楼上意见!!
--------------------------
经典,静态方法是不能被重写的!!
hellox 2007-05-22
  • 打赏
  • 举报
回复
顶tomkai
tomkai 2007-05-22
  • 打赏
  • 举报
回复
举个例子让你更明白;

======
class Father{
void method(){
System.out.println("method of father");
}

static void staticMethod(){
System.out.println("static method of father");
}
}

public class Son extends Father{
void method(){
System.out.println("method of son");
}

static void staticMethod(){
System.out.println("static method of son");
}

public static void main(String args[]){
Father son1 = new Son();//声明为Father类,son1静态方法和Father类绑

son1.method();
son1.staticMethod();

Son son2 = new Son();
son2.method();
son2.staticMethod();
}
}

============
method of son
static method of father
method of son
static method of son
tomkai 2007-05-22
  • 打赏
  • 举报
回复
楼上老师弄错了吧...

覆盖才是用在父子类之间...重载可以用于同一个类的所有方法.也包括从父类继承的方法

===========
这个地方我也没有说太清楚...子类定义和父类的静态,其实是在子类中隐藏父类的静态方法..

子类隐藏父类的静态方法和子类覆盖父类实例方法还是有区别的.区别在:运行时..JAVA 虚拟机把静态方法和所属的类绑定,而把实例方法和所属的实例绑定...
joejoe1991 2007-05-22
  • 打赏
  • 举报
回复
怎么我们老师说的重写是用在父子类之间

有相同的方法名。。但参数不一样 这是重载吧?
还是我记错了?
goziung 2007-05-22
  • 打赏
  • 举报
回复
首先要强调,静态方法是不能被覆盖的。

原因:
在子类中,可以定义与父类同名的静态方法,不过并不存在“多态”,严格的说,方法间没有多态就不能称作“覆盖”。所以说,子类的静态方法,并没有覆盖父类的方法。
KYO_vs_IORI 2007-05-22
  • 打赏
  • 举报
回复
我补充楼上的。。
覆盖是用于父类和子类之间。。
重写是用在同一个类中。。有相同的方法名。。但参数不一样。。
tomkai 2007-05-22
  • 打赏
  • 举报
回复
楼主对于覆盖的概念还没有完全弄清楚
1.父类的静态方法可以被子类的静态方法覆盖
2.父类的非静态方法不能被子类的静态方法覆盖
3.父类的静态方法不能被子类的非表态方法覆盖
tianchunyu 2007-05-22
  • 打赏
  • 举报
回复
请大家到我的计算机论坛看看,随便给提点意见,人多力量大嘛,注册一下,回答几个一直我都不会的问题,肯定我会给大家奖励的,网址是,http://java.cc.topzj.com/
加载更多回复(1)

62,614

社区成员

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

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