论坛首页 入门技术论坛

静态方法继承和覆盖

浏览 5295 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (2)
作者 正文
   发表时间:2009-09-02   最后修改:2010-02-23

static的方法到底能不能覆盖?

1.定义StaticExt类

package com.freelunch.test;

public class StaticExt {
	
	public static  void test()
	{
		System.out.println("father");
	}
}

 
 2.定义StaticExt 的子类StaticExtSon

package com.freelunch.test;

public class StaticExtSon extends StaticExt{
	
	public  static void test()
	{
		System.out.println("son");
	}
	
	public static void main(String[] args) {
		StaticExtSon.test(); // "son"
		
		new StaticExtSon().test(); // "son"
		
		StaticExt f = new StaticExtSon();
		f.test();// "father" 
	}
}

 

输出:

son
son
father

 

3. 结论

静态方法只与定义时所在的类相关,在编译期就已经绑定到某个类。可以继承,但不能在子类中被同名方法覆盖。

由定义引用的类型决定调用的是父类还是子类的方法。

 

   发表时间:2009-09-04  
static的方法是不能被覆盖的
0 请登录后投票
   发表时间:2009-09-04  
这种帖子不隐藏 只会对后来人产生误导
0 请登录后投票
   发表时间:2009-09-04  
静态方法是不能被覆盖的  而是被隐藏了
通过父类的引用调用的是父类的静态方法
0 请登录后投票
   发表时间:2009-09-05  
qianhd 写道
这种帖子不隐藏 只会对后来人产生误导

可能我的表述确实有些问题,对新手来说会有一定的误导,献丑了 :(
PS:各位大哥说的有理,但我也没有说静态方法能够被覆盖呀。
0 请登录后投票
   发表时间:2010-06-06  
无意搜到了这个帖子
我为什么觉得静态方法是不能被继承的呢?也就根本谈不上覆盖了
当StaticExtSon没有写test()方法时,根本就不能使用StaticExtSon.test()静态方法。
楼主的例子只能说明静态方法是早绑定。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics