黑马程序员技术交流社区

标题: 静态覆盖静态 [打印本页]

作者: 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