继承父类后,覆盖了父类的成员,为什么有些还是父类的成员呢? 注:有静成员

简述:
父类有四个成员:两个属性与两个方法,属性与方法均分为静态与非静态的(方法不修改属性值)。子类继承时,改变了属性值与方法体。
现在出现了以下几个问题,经学习也都得到答案。

1、问:为什么子类不会覆盖父类的静态方法及静态属性值?
    答:静态成员是在编译的时候把静态成员和类的引用类型进行匹配,而不是在运行的时候和类引用进行匹配。虽然实例化后也可以引用类的静态成员,但这些都是在编译时,就已与类匹配好了,所以 当 Parent p = new Clild(); p的静态成员与Parent是一致的,不受Clild的影响。

2、问:子类覆盖父类的方法与属性后,把子类强制转化为父类类型,为什么这时方法体是子类的,而属性却是父类的呢?
    答:1)变量的值取决于我们定义的变量的类型,而不是创建的对象的类型;
        2)访问修饰符并不影响属性的覆盖(由于private变量受访问权限的限制,它不能被覆盖);
这时还是思考与静态属性的一样,编译器是在什么进行匹配的?为什么要分不同的时期匹配?
属性的值取父类还是子类并不取决于我们创建对象的类型,而是取决于我们定义的变量的类型。
friendly、protected和public修饰符并不影响属性的覆盖。(由于private变量受访问权限的限制,它不能被覆盖)
静态变量和静态常量属于类,不属于对象,因此它们不能被覆盖。
常量可以被覆盖。
对于基本类型和对象,它们适用同样的覆盖规律。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值