快速业务通道

Java中的两个特殊变量this和super - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

Java中的两个特殊变量this和super

时间:2010-12-26 yesky Wayne

在Java中有两个非常特殊的变量:this和super,这两个变量在使用前都是不需要声明的。this变量使用在一个成员函数的内部,指向当前对象,当前对象指的是调用当前正在执行方法的那个对象。super变量是直接指向超类的构造函数,用来引用超类中的变量和方法。因此它们都是非常有用的变量,下面我想介绍一下this和super的使用方法。

1、this

让我们先看一段代码吧:

class PersonInformation    {     String name,gender,nationality,address;     int age;     void PersonInformation(String p_name,String p_gender,String p_nationality,String p_address,int p_age)     {      name=p_name;      gender=p_gender;      nationality=p_nationality;      address=p_address;      age=p_age;     }    }

你会发现,在PersonInformation()函数中这个对象的方法提示可以直接访问对象的成员变量的,而且在同一个范围中,定义两个相同的名字的局部变量是不允许的,如果确实想使类的成员变量和方法的参数或方法自己定义的局部变量同名的话就需要想一种方法使成员变量与更它同名的方法参数或局部变量区分开来,这就要使用到this变量。下面我想改写一下上面的代码,使PersonInformation类的构造函数的每个参数都有与对象成员变量相同的名字,而成员变量的初值由参数给出。

class PersonInformation     {      String name,gender,nationality,address;      int age;      void PersonInformation(String name,String gender,String nationality,String address,int age)      {      this.name=name;      this.gender=gender;      this.nationality=nationality;      this.address=address;      this.age=age;      }     }

Java中的两个特殊变量this和super(2)

时间:2010-12-26 yesky Wayne

由上一例中,我们可以看出,该构造函数中必须使用this,this在方法体重用来指向引用当前正在执行方法的那个对象实例,this变量的类型总是为包含前执行方法的类,上例中,我们要区别参数name和成员变量name,写成name=name显然是不允许的,在参数或局部变量名与类成员变量同名的时候,由于参数或局部变量的优先级高,这样在方法体中参数名或局部变量名将隐藏同名的成员变量,因此,为了值名成员变量,你必须使用this显示地指明当前对象。

有时候会遇到这种情况,我们全面的访问当前对象,而不是访问某一个个别的实例对象,我们也可以使用this,并利用Java中的toString()方法(它能够返回一个描述这个对象的字符串)如果把任何一个对象传递到System.out.println方法中,这个方法调用这个对象的toString方法,并打印出结果字符串,所以,我们可以用如下方法System.out.println(this),来打印出任何对方法固有参数的当前状态。

this还有一个用法,就是构造函数的第一个语句,它的形式是this(参数表),这个构造函数就会调用同一个类的另一个相对的构造函数。请看下面的例子:

class UserInfo    {     public UserInfo(String name)     {      this(name,aNewSerialNumber);     }     public Userinfo(String name,int number)     {      userName=name;      userNumber=number;     }     }

如果你调用UserInfor newinfotable = new UserInfo("Wayne Zheng")后,就会自动调用UserInfo(String name,int number)构造函数。

可见,熟练掌握this在Java程序设计过程中是非常重要的

2、super

在Java中,有时还会遇到子类中的成员变量或方法与超类(有时也称父类)中的成员变量或方法同名,因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量和方法就隐藏了超类的成员变量或方法,但是我们如果想要使用超类中的这个成员变量或方法,此使就需要用到super,请看下面的类。

class Country     {      String name;      void value()      {       name="China";      }     }

下面的子类中,自类的成员变量和方法隐藏了超类的成员变量name和方法value(),

class City extends Country      String name;      void value()      {       name="Hefei";       super.value();       System.out.println(name);       System.out.println(super.name);      }

为了在子类中引用超类中的成员变量name和方法value(),在代码中我们使用了super,super.name和super.value();

所以显示的结果为

Hefei

China

如果我们想要使用超类的构造函数则应当使用super(参数列表)的形式。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号