因此它们都是非常有用的变量,下面我想介绍一下this和super的使用方法。
sCc北方站长站 1、
thissCc北方站长站 让我们先看一段代码吧:
sCc北方站长站 class PersonInformation
sCc北方站长站 {
sCc北方站长站 String name,gender,nationality,address;
sCc北方站长站 int age;
sCc北方站长站 void PersonInformation(String p_name,String p_gender,String p_nationality,String p_address,int p_age)
sCc北方站长站 {
sCc北方站长站 name=p_name;
sCc北方站长站 gender=p_gender;
sCc北方站长站 nationality=p_nationality;
sCc北方站长站 address=p_address;
sCc北方站长站 age=p_age;
sCc北方站长站 }
sCc北方站长站 }
sCc北方站长站 sCc北方站长站 你会发现,在PersonInformation()函数中这个对象的方法提示可以直接访问对象的成员变量的,而且在同一个范围中,定义两个相同的名字的局部变量是不允许的,如果确实想使类的成员变量和方法的参数或方法自己定义的局部变量同名的话就需要想一种方法使成员变量与更它同名的方法参数或局部变量区分开来,这就要使用到this变量。下面我想改写一下上面的代码,使PersonInformation类的构造函数的每个参数都有与对象成员变量相同的名字,而成员变量的初值由参数给出。
sCc北方站长站 class PersonInformation
sCc北方站长站 {
sCc北方站长站 String name,gender,nationality,address;
sCc北方站长站 int age;
sCc北方站长站 void PersonInformation(String name,String gender,String nationality,String address,int age)
sCc北方站长站 {
sCc北方站长站 this.name=name;
sCc北方站长站 this.gender=gender;
sCc北方站长站 this.nationality=nationality;
sCc北方站长站 this.address=address;
sCc北方站长站 this.age=age;
sCc北方站长站 }
sCc北方站长站 }
sCc北方站长站 由上一例中,我们可以看出,该构造函数中必须使用this,this在方法体重用来指向引用当前正在执行方法的那个对象实例,this变量的类型总是为包含前执行方法的类,上例中,我们要区别参数name和成员变量name,写成name=name显然是不允许的,在参数或局部变量名与类成员变量同名的时候,由于参数或局部变量的优先级高,这样在方法体中参数名或局部变量名将隐藏同名的成员变量,因此,为了值名成员变量,你必须使用this显示地指明当前对象。
sCc北方站长站 有时候会遇到这种情况,我们全面的访问当前对象,而不是访问某一个个别的实例对象,我们也可以使用this,并利用Java中的toString()方法(它能够返回一个描述这个对象的字符串)如果把任何一个对象传递到System.out.println方法中,这个方法调用这个对象的toString方法,并打印出结果字符串,所以,我们可以用如下方法System.out.println(this),来打印出任何对方法固有参数的当前状态。
sCc北方站长站 this还有一个用法,就是构造函数的第一个语句,它的形式是this(参数表),这个构造函数就会调用同一个类的另一个相对的构造函数。请看下面的例子:
sCc北方站长站 class UserInfo
sCc北方站长站 {
sCc北方站长站 public UserInfo(String name)
sCc北方站长站 {
sCc北方站长站 this(name,aNewSerialNumber);
sCc北方站长站 }
sCc北方站长站 public Userinfo(String name,int number)
sCc北方站长站 {
sCc北方站长站 userName=name;
sCc北方站长站 userNumber=number;
sCc北方站长站 }
sCc北方站长站 }
sCc北方站长站 如果你调用UserInfor newinfotable = new UserInfo("Wayne Zheng")后,就会自动调用UserInfo(String name,int number)构造函数。
sCc北方站长站 可见,熟练掌握this在Java
程序设计过程中是非常重要的
sCc北方站长站 2、
supersCc北方站长站 在Java中,有时还会遇到子类中的成员变量或方法与超类(有时也称父类)中的成员变量或方法同名,因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量和方法就隐藏了超类的成员变量或方法,但是我们如果想要使用超类中的这个成员变量或方法,此使就需要用到super,请看下面的类。
sCc北方站长站 class Country
sCc北方站长站 {
sCc北方站长站 String name;
sCc北方站长站 void value()
sCc北方站长站 {
sCc北方站长站 name="China";
sCc北方站长站 }
sCc北方站长站 }
sCc北方站长站 下面的子类中,自类的成员变量和方法隐藏了超类的成员变量name和方法value(),
sCc北方站长站 class City extends Country
sCc北方站长站 String name;
sCc北方站长站 void value()
sCc北方站长站 {
sCc北方站长站 name="Hefei";
sCc北方站长站 super.value();
sCc北方站长站 System.out.println(name);
sCc北方站长站 System.out.println(super.name);
sCc北方站长站 }
sCc北方站长站 sCc北方站长站 为了在子类中引用超类中的成员变量name和方法value(),在代码中我们使用了super,super.name和super.value();
sCc北方站长站 所以显示的结果为
sCc北方站长站 Hefei
sCc北方站长站 China
sCc北方站长站 如果我们想要使用超类的构造函数则应当使用super(参数列表)的形式。
sCc北方站长站
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面