Java中的super限定

一 super限定介绍
Java中允许通过关键字super来调用父类的方法或属性。
super不能出现在static修饰的方法中。

 

二 通过super限定访问父类的成员变量
1 代码示例 下载

Java代码

  1. class BaseClass  
  2. {  
  3.     public int a = 5;  
  4. }  
  5. public class SubClass extends BaseClass  
  6. {  
  7.     public int a = 7;  
  8.     public void accessOwner()  
  9.     {  
  10.         System.out.println(a);  
  11.     }  
  12.     public void accessBase()  
  13.     {  
  14.         // 通过super来限定访问从父类继承得到的a实例变量  
  15.         System.out.println(super.a);         //a  
  16.     }  
  17.     public static void main(String[] args)  
  18.     {  
  19.         SubClass sc = new SubClass();  
  20.         sc.accessOwner(); // 输出7  
  21.         sc.accessBase(); // 输出5  
  22.     }  
  23. }  

 2 运行结果
7
5
3 结果分析
a变量在子类和父类都定义了。当系统创建SubClass对象时,实际上为SubClass对象分配两块内存,一块用于存储在SubClass类定义的a实例变量,一块用于存储从BaseClass类继承得到的a实例变量。
a处代码通过super限定访问从父类得到的a实例变量。 下载

 

三 子类隐藏父类定义变量的内存运行图
1 代码示例 下载

Java代码

  1. class Parent  
  2. {  
  3.     public String tag = "父类";         //①  
  4. }  
  5. class Derived extends Parent  
  6. {  
  7.     // 定义一个私有的tag实例变量来隐藏父类的tag实例变量  
  8.     private String tag = "子类";         //②  
  9. }  
  10. public class HideTest  
  11. {  
  12.     public static void main(String[] args)  
  13.     {  
  14.         Derived d = new Derived();  
  15.         // 程序不可访问d的私有变量tag,所以下面语句将引起编译错误  
  16.         // System.out.println(d.tag);         //③  
  17.         // 将d变量显式地向上转型为Parent后,即可访问tag实例变量  
  18.         // 程序将输出:“父类”  
  19.         System.out.println(((Parent)d).tag);         //④  
  20.     }  
  21. }  

 HideTest.java
2 运行结果
父类
3 结果分析 下载



 
程序先创建一个Derived对象,这个对象保存两个tag实例变量,一个是父类的,一个是子类的,此时程序中包括一个d变量,引用了一个Derived对象,内存示意图如上。
程序在④行代码处先将d变量强制向上转为Parent类型,再通过它来访问tag实例变量是允许的,此时系统将访问1行粗体代码处定义的tag实例变量。

转载于:https://my.oschina.net/u/2931861/blog/753629

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值