黑马程序员技术交流社区
标题:
静态覆盖静态
[打印本页]
作者:
yunqiangshan
时间:
2011-12-23 10:44
标题:
静态覆盖静态
本帖最后由 yunqiangshan 于 2011-12-25 22:33 编辑
子类继承父类时,父类中有静态方法,子类要覆盖该方法,那么子类的方法也必须是静态的,但是在多态调用的时候只看左边,也就是只看引用型变量所属的类,就是说多态时由于引用型变量是父类,所以还是调用的父类的静态方法。那么这样做就没有什么实际意义了,创建父类引用还是只能调用父类的静态方法,是不是静态覆盖静态本来就没什么意义?还是有其他用法呢?
作者:
王胜利
时间:
2011-12-23 12:45
基类与子类中声明了一个相同名称的属性,基类和子类都可以分别管理自己的属性,且属性值不会被覆盖,即使基类与子类中声明了一个相同名称的静态变量,静态变量的值也不会覆盖。
虽然在子类和父类中定义相同名称的属性,在语义上没有多大意义
作者:
陈帅雷
时间:
2011-12-23 14:25
static成员不依赖对象而存在,但说static不能继承恐怕不准确。用派生类也可以访问基类的static方法(当然要可见)。关于是不是覆盖,下面说明:
class a {
void m(){
System.out.println( "this is class a ");
};
}
class b extends a {
void m(){
System.out.println( "this is class b ");
};
}
class text {
public static void main() {
a a1 = new b();
a1.m();
}
结果:
this is class b
这是正常的覆盖行为。
然后在两个m()前加上static再看一下结果,你会发现:
this is class a
静态方法的调用根本不取决于对象的实际类型,而只是声明的类型。
所以,这也不是覆盖。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2