副标题#e#
下面再来先容一下this和super要害字的利用。在措施中通过利用this和super要害字,可以实现对付类内部许多内容利便的引用,也有助于领略面向工具的实现道理,更利便的领略面向工具技能的内部实现。
8.8.1 this要害字
this要害字代表自身,在措施中主要的利用用途有以下几个方面:
l 利用this要害字引用成员变量
l 利用this要害字在自身结构要领内部引用其它结构要领
l 利用this要害字代表自身类的工具
l 利用this要害字引用成员要领
8.8.1.1 引用成员变量
在一个类的要领或结构要领内部,可以利用“this.成员变量名”这样的名目来引用成员变量名,有些时候可以省略,有些时候不能省略。首先看一下下面的代码:
/**
* 利用this引用成员变量
*/
public class ReferenceVariable {
private int a;
public ReferenceVariable(int a){
this.a = a;
}
public int getA(){
return a;
}
public void setA(int a){
this.a = a;
}}
在该代码的结构要领和setA要领内部,都是用this.a引用类的成员变量。因为无论在结构要领照旧setA要领内部,都包括2个变量名为a的变量,一个是参数a,别的一个是成员变量a。凭据Java语言的变量浸染范畴划定,参数a的浸染范畴为结构要领或要领内部,成员变量a的浸染范畴是类的内部,这样在结构要领和setA要领内部就存在了变量a的斗嘴,Java语言划定当变量浸染范畴重叠时,浸染域小的变量包围浸染域大的变量。所以在结构要领和setA要领内部,参数a起浸染。
这样需要会见成员变量a则必需利用this举办引用。虽然,假如变量名不产生重叠,则this可以省略。
可是为了加强代码的可读性,一般将参数的名称和成员变量的名称保持一致,所以this的利用频率在类型的代码内部应该许多。
#p#副标题#e#
8.8.1.2 引用结构要领
在一个类的结构要领内部,也可以利用this要害字引用其它的结构要领,这样可以低落代码的反复,也可以使所有的结构要领保持统一,这样利便今后的代码修改和维护,也利便代码的阅读。
下面是一个简朴的示例:
/**
* 利用this要害字引用结构要领
*/
public class ReferenceConstructor {
int a;
public ReferenceConstructor(){
this(0);
}
public ReferenceConstructor(int a){
this.a = a;
}}
这里在不带参数的结构要领内部,利用this挪用了别的一个结构要领,个中0是按照需要通报的参数的值,当一个类内部的结构要领较量多时,可以只书写一个结构要领的内部成果代码,然后其它的结构要领都通过挪用该结构要领实现,这样既担保了所有的结构是统一的,也低落了代码的反复。
在实际利用时,需要留意的是,在结构要领内部利用this要害字挪用其它的结构要领时,挪用的代码只能呈此刻结构要领内部的第一行可执行代码。这样,在结构要领内部利用this要害字挪用结构要领最多会呈现一次。
8.8.1.3 代表自身工具
在一个类的内部,也可以利用this代表自身类的工具,可能换句话说,每个类内部都有一个隐含的成员变量,该成员变量的范例是该类的范例,该成员变量的名称是this,实际利用this代表自身类的工具的示例代码如下:
/**
* 利用this代表自身类的工具
*/
public class ReferenceObject {
ReferenceObject instance;
public ReferenceObject(){
instance = this;
}
public void test(){
System.out.println(this);
}}
在结构要领内部,将工具this的值赋值给instance,在test要领内部,输出工具this的内容,这里的this都代表自身范例的工具。
8.8.1.4 引用成员要领
在一个类的内部,成员要领之间的相互挪用时也可以利用“this.要领名(参数)”来举办引用,只是所有这样的引用中this都可以省略,所以这里就不具体先容了。
8.8.2 super要害字
super要害字的中文意思是超等的,利用super要害字可以在子类中引用父类中的内容。主要的利用形式有以下几种:
l 在子类的结构要领内部引用父类的结构要领
l 在子类中挪用父类中的成员要领
l 在子类中挪用父类中的成员变量
8.8.2.1 引用父类结构要领
在结构子类工具时,必需挪用父类的结构要领。而为了利便代码的编写,在子类的结构要领内部会自动挪用父类中默认的结构要领。可是假如父类中没有默认的结构要领时,则必需手动举办挪用。
利用super可以在子类的结构要领内部挪用父类的结构要领。可以在子类的结构要领内部按照需要挪用父类中的结构要领。
利用super要害字挪用父类结构要领的示例代码如下:
#p#分页标题#e#
//文件名:SuperClass.java
public class SuperClass {
public SuperClass(){}
public SuperClass(int a){}}
//文件名:SubClass.java
public class SubClass extends SuperClass {
public SubClass(){
super(); //可省略
}
public SubClass(int a){
super(a);
}
public SubClass(String s){
super(); //可省略
}}
在该示例代码中,SubClass担任SuperClass类,在SubClass类的结构要领内部可以利用super要害字挪用父类SubClass的结构要领,详细挪用哪个结构要领没有限制,可以在子类内部按照需要举办挪用,只是按照挪用的结构要领差异传入适当的参数即可。
由于SubClass类的父类SuperClass内部有默认的结构要领,所以SubClass的结构要领内部super()的代码可以省略。
和利用this要害字挪用结构要领一样,super挪用结构要领的代码只能呈此刻子类结构要领中的第一行可执行代码。这样super挪用结构要领的代码在子类的结构要领内部则最多呈现一句,且不能和this挪用结构要领的代码一起利用。
8.8.2.2 引用父类成员要领
在子类中担任了父类中的成员要领,一般可以直接通过要领名利用,可是假如在子类中包围了父类的成员要领今后,假如需要在子类内部挪用父类中被包围的成员要领时则不能直接挪用了,这样就又需要利用super要害字了。
示例代码如下:
//文件名:SuperClass2.java
public class SuperClass2 {
public void test(){}
public void print(int a){
System.out.println("SuperClass2: " + a);
}}
//文件名:SubClass2
public class SubClass2 extends SuperClass2 {
public void print(int a){
super.print(a);
System.out.println("SubClass2");
}
public void t(){
super.test(); //super可省略
super.print(0); //不行省略
}}
8.8.2.3 引用父类成员变量
在子类中假如引用父类的成员变量,也可以利用“super.成员变量”来引用,只是一般成员变量的包围是没有意义的,所以这个时候都可以直接利用成员变量名举办引用,所以这里的super都可以省略。
8.8.3 留意的问题
最后,在实际利用this和super时,除了上面先容到的需要留意的问题以外,还需要出格留意的是,this和super都长短静态的,所以这两个要害字都无法在静态要领内部举办利用。