黑马程序员技术交流社区
标题:
父类中的static方法能否在子类中被重写?
[打印本页]
作者:
forDream
时间:
2014-3-8 12:16
标题:
父类中的static方法能否在子类中被重写?
父类中的static方法能否在子类中被重写?
class Fu
{
static void show()
{
code.......;
}
}
class Zi extends Fu
{
static void show()
{
code.......;
}
}
这样算是重写吗?
Fu f = new Zi();
f.show();调用哪个方法?
在内存中他两个是不是在一起啊
作者:
volvoxc
时间:
2014-3-8 12:38
静态方法不能被重写,他是属于类级别的。一个类共用。所以,如果你一个类 A 其中有个静态方法 a ,子类B继承A,其中也有一个静态方法a,这两个并不是继承关系,也没有多态的特性。
作者:
chen_x
时间:
2014-3-8 13:16
这个应该也算是重写吧,只不过静态成员函数的重写没有多大意义
静态成员先于对象存在,在类一加载到内存时就被绑定到类,所以Fu f=new Zi(); f. show()执行就只与左边引用型变量f所属的类(Fu)有关,而与f对象所属的类(Zi)无关.
Fu和Zi中的show()函数在内存中应该存在于各自的类代码块中,不是在一起的
class Fu
{
static void show()
{
System.out.println("fu");
}
}
class Zi extends Fu
{
static void show()
{
System.out.println("zi");
}
}
public class Test6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Fu f=new Zi();
f.show();
}
运行结果是fu.
毕老师基础视频中有关于多态中静态和非静态成员的特点说明,自己学习后一直是按前面所说来理解的,不对的地方还请指正~
作者:
Zero霖
时间:
2014-3-8 13:44
父类的静态方法是不同被子类重写的。你的程序里边f.show调用的是父类的静态方法。
作者:
osully
时间:
2014-3-8 15:03
毕老师说过,这是重写(覆盖).
记住大家:
重载:只看同名函数的参数列表。
重写:子父类方法要一模一样。
重写(覆盖):
1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
2,静态只能覆盖静态。
但是在多态特性里面,又出现以下特性:
成员函数在多态调用时,编译看左边,运行看右边。
成员变量 ---无论编译和运行,都参考左边(引用型变量所属的类)。
静态函数 --- 编译运行都看 = 左边。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2