继承中静态方法不能被重写

本文链接:https://blog.csdn.net/gao_zhennan/article/details/72892946

解释的很清楚

答案很明确:java的静态方法不能被重写。
静态成员(方法或属性)是类的成员存放在栈中,类可以直接调用(是属于类的静态成员,当然对象也可以调用,只是说你可以使用而已);实例成员是对象的成员,存放在堆中,只能被对象调用。
重写的目的在于根据创造对象的所属类型不同而表现出多态。因为静态方法无需创建对象即可使用。没有对象,重写所需要的“对象所属类型” 这一要素不存在,因此无法被重写。

千言万语,不如代码:

class A{
    public static show(){
        System.out.println(" Static Method of A");
    }
}
class B extends A{
    public static show(){
        System.out.println("Static Method of B");

    }
}

结果,很明显了。如果是重写的话,x.show的结果应该是Static Method of B,从运行结果来看show的结果是和对象的应用及所属类有关。所以说静态成员是属于类的。

那么,怎么描述B中的show和A中的show的关系呢?不是重写,其实也不是重载(验证方法参照上面的代码)
其实他们的关系可以成为:重定义!即重新定义类中的成员。
举个例子:
1子类重新定义从超类获得的属性

class A { public int x=5;}
class B extends A{ public boolean x=true;}
A a=new B(); B b=new B();

由于B中重新定义了名为x的属性,从A中继承而来的X就被屏蔽了。但依然存在,可以通过super.x来获得其值
2,子类定义的方法与超类的私有方法或者静态方法同名
对超类的私有方法。由于无法派生给子类,因此子类在定义与该类方法同名的方法时不存在任何前提限制。另外,静态方法不能重写但能重定义!

 

转载于:https://www.cnblogs.com/gxlaqj/p/11420726.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值