A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yunqiangshan 黑马帝   /  2011-12-23 10:44  /  1934 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yunqiangshan 于 2011-12-25 22:33 编辑

              子类继承父类时,父类中有静态方法,子类要覆盖该方法,那么子类的方法也必须是静态的,但是在多态调用的时候只看左边,也就是只看引用型变量所属的类,就是说多态时由于引用型变量是父类,所以还是调用的父类的静态方法。那么这样做就没有什么实际意义了,创建父类引用还是只能调用父类的静态方法,是不是静态覆盖静态本来就没什么意义?还是有其他用法呢?

2 个回复

倒序浏览
基类与子类中声明了一个相同名称的属性,基类和子类都可以分别管理自己的属性,且属性值不会被覆盖,即使基类与子类中声明了一个相同名称的静态变量,静态变量的值也不会覆盖。

虽然在子类和父类中定义相同名称的属性,在语义上没有多大意义
回复 使用道具 举报
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
静态方法的调用根本不取决于对象的实际类型,而只是声明的类型。
所以,这也不是覆盖。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马