Java中的两个特殊变量this和super
2006-09-08 16:02
281 查看
Java中的两个特殊变量this和super |
2001-04-26· ·Wayne ··yesky |
在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中的两个特殊变量this和super
- Java中的两个特殊变量this和super- -
- Java中的两个特殊变量this和super
- 在Java中有两个非常特殊的变量:this和super
- Java中的两个特殊变量this和super
- Java中的两个特殊变量this和super
- Java中的两个特殊变量this和super
- java基础(八)Math/代码块/继承成员方法指南的关系/继承中成员变量之间的关系/方法的重写/继承中构造方法之间的关系/this和super的区别
- Java(方法重写与变量覆盖)(super,this的使用)
- Java中的两个关键字——super、this
- Java中super的几种用法并与this的区别,this的特殊用法
- Java第二课 Java面向对象编程,面向对象编程和面向过程编程的区别,我们如何才能掌握面向对象的编程,类和对象的关系;讲解了Java中的构造、重载、this和super变量、静态变量、Java中的常
- JAVA中this与super两个关键字的用法
- JAVA面向对象基础:继承、变量隐藏、方法重写、包、修饰符、this、super
- java面向对象(二)特殊变量this
- Java 两个变量交换值
- Java 关键字super和this的使用及区别
- 【JAVA基础】③关于this,super,static和final
- java实现两个变量值交换不使用第三个变量
- Java基础:this和super的用法