• Java中的super限定


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

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

    class BaseClass
    {
    	public int a = 5;
    }
    public class SubClass extends BaseClass
    {
    	public int a = 7;
    	public void accessOwner()
    	{
    		System.out.println(a);
    	}
    	public void accessBase()
    	{
    		// 通过super来限定访问从父类继承得到的a实例变量
    		System.out.println(super.a);         //a
    	}
    	public static void main(String[] args)
    	{
    		SubClass sc = new SubClass();
    		sc.accessOwner(); // 输出7
    		sc.accessBase(); // 输出5
    	}
    }

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

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

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

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



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

  • 相关阅读:
    sql 将某列转换成一个字符串 for xml path用法
    IAsyncResult 接口异步 和 匿名委托
    存储过程和sql语句的优缺点
    ADO.net中常用的对象有哪些?分别描述一下。
    ASP.Net页面生命周期
    请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
    .net常用的传值的方法
    SQL列合并
    程序员的情书!
    程序员的表达!
  • 原文地址:https://www.cnblogs.com/ainima/p/6331657.html
Copyright © 2020-2023  润新知