继承时字段的可见范围

Fields cannot be overridden; they can only be hidden.
字段不会被覆盖,只会被隐藏。如果在子类中声明了与父类中完全同名的字段(与该字段是否相同类型无关),其父类中的该同名字段仍然存在,但是现在不能直接被子类使用,而需要使用super.fieldName。
当通过一个对象的引用调用一个方法时,该方法为对象的实际类中的实现,不管是通过父类引用还是子类引用,调用的方法都是子类中的实现。

当访问一个字段时,与调用方法不同,此时该字段是与该对象的引用有关的。当使用父类的引用去访问字段时,得到的是父类中该字段的值;当使用子类的引用去访问字段时,得到的是子类中该字段的值。

可以参考如下示例:
  1. classSuperShow{
  2. publicStringstr="SuperStr";

  3. publicvoidshow(){
  4. System.out.println("Super.show:"+str);
  5. }
  6. }

  7. classExtendShowextendsSuperShow{
  8. publicStringstr="ExtendStr";

  9. publicvoidshow(){
  10. System.out.println("Extend.show:"+str);

  11. }

  12. publicstaticvoidmain(String[]args){
  13. ExtendShowext=newExtendShow();
  14. SuperShowsup=ext;
  15. sup.show();
  16. ext.show();
  17. System.out.println("sup.str="+sup.str);
  18. System.out.println("ext.str="+ext.str);
  19. }
  20. }


输出结果为:
Extend.show: ExtendStr
Extend.show: ExtendStr
sup.str = SuperStr
ext.str = ExtendStr
///
一个对象,有两个指向它的引用,一个是 ExtendShow类型,一个是 SuperShow类型。
调用show()方法时,会判断该对象的实际类型,该对象实际为
ExtendShow类型,所以执行的show()方法也是 ExtendShow类中定义的方法。
对于str字段的访问与指向该对象的引用的类型有关,
sup.str取得的是 SuperShow类中的str值,而 ext.str取得的是 ExtendShow类中的str值。方法里面使用的字段是在定义该方法的类中声明的,如果没有声明,则是继承而来的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值