当前位置: 首页 > 图灵资讯 > 技术篇> Java中的两个特殊变量this和super

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

来源:图灵教育
时间:2024-02-28 17:22:23

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

  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显示器指示当前对象。

  有时我们会遇到这种情况。我们可以全面访问当前对象,而不是个别实例对象。如果我们将任何对象传输到Systemm,我们也可以使用this和Java中的tostring()方法(它可以返回描述对象的字符串).out.在println方法中,该方法调用该对象的tostring方法,打印结果字符串,所以我们可以使用以下方法Systemm.out.println(this),打印方法中任何固有参数的当前状态。

  this的另一个用法是构造函数的第一个句子。它的形式是this(参数表),该构造函数将调用同一类别的另一个相对构造函数。请参见以下示例:

  class UserInfo

  {

   public UserInfo(String name)

   {

    this(name,aNewSerialNumber);

   }

   public Userinfo(String name,int number)

   {

    userName=name;

    userNumber=number;

   }

   }

  如果您使用UserInforr newinfotable = new UserInfo("Wayne Zheng")之后,UserInfo将自动调用(String name,int number)构造函数。

   可见,掌握this在Java程序设计过程中非常重要、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);

    }    我们在代码中使用super,以引用超级成员变量name和方法value(),super.name和super.value();

   所以显示的结果是

   Hefei

   China

   若要使用超类结构函数,则应采用super(参数列表)的形式。