选择显示字体大小

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


  在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;

    }

   }

  由上一例中,我们可以看出,该构造函数中必须使用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(参数列表)的形式。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons