有时会遇到this作为返回值的情况,那么此时返回的到底是什么呢?
返回的是调用this所处方法的那个对象的引用,读起来有点绕口哈,有没有想起小学语文分析句子成份的试题,哈哈。
一点点分析的话,主干是“返回的是引用”;
什么引用呢?“那个对象的引用”;
哪个对象呢?“调用方法的那个对象”;
调用的哪个方法呢?“调用的是this所位于的方法”;这样就清楚了。
再总结一下就是,this作为返回值时,返回的是调用某方法的对象的引用,这个方法正是包含“return this;”这行命令的那个方法;更简单点说,就是谁调用返回的就是谁。由于返回的是对象引用,所以this不能用在静态成员方法中,只能在非静态成员方法中出现。
为了更清楚、直观的理解问题,下面以简单的例子说明。
作者: 蝉蝉
请尊重作者劳动成果,转载请在标题注明“转载”字样,并标明原文链接:
http://www.cnblogs.com/chanchan/p/7812166.html
追加(11.26):
添加了下面5项测试代码:
(1).子类对象调用父类中返回this的方法,该方法未被子类重写
(2).子类对象调用父类中返回this的方法,该方法已被子类重写,且返回值类型与父类返回值类型一致
(3).父类对象引用指向子类对象时,即向上转型时,父类对象引用调用未被子类重写的返回this的方法
(4).向上转型时,父类对象引用调用被子类重写的返回this的方法,且返回值与父类返回值类型一致
(5).向上转型时,父类对象引用调用被子类重写的返回this的方法,且返回值类型为父类返回值类型的子类
分析见后文
(11.26)
包human中定义了Person类、Student类及测试类TestMain,其中Student是Person的子类。
Person类代码如下:
packagehuman;public classPerson {
String name;intage;publicPerson() {
}publicPerson(String n, String g) {name =n;gender =g;
}//test:this作返回值
Person reThis1() {
Person per= new Person("lu","female");
System.out.println("reThis1 per:" +per.name);return this;
}
Person reThis2() {
Person per=reThis1();
System.out.println("reThis2 per:" +per.name);return this;
}
Person reThis3() {