this 关键字的用法(DOTA篇)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
引入:如果class “英雄” 有两个对象 “众神”,“电魂” 他们都有一个方法“放电”.
class英雄{void放电(int i) {/*……..*/}}
public class英雄放电{
public static void main(String[] x){
英雄 众神= new英雄();
英雄 电魂= new英雄();
众神.放电(1);
电魂.放电(2);
}
}
如果只有一个放电() 方法,如何让这两个对象都能调用放电() 呢。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1. this在方法内部获得对当前对象的引用。 通俗的说:调用了升了级的那个英雄
例1.
public class 英雄{
int i =0;
英雄 等级(){
i++;
return this; // 返回当前英雄的引用
}
void 显示(){System.out.println(“i = ” + i);}
public static void main(String[] w){
英雄 a= new 英雄();
a.等级().等级().等级().显示(); // 对同一个英雄执行多次升级
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2. this将当前对象传递给其他方法。 通俗的说:将被钩到的英雄传递给屠夫吃肉
例2
class 屠夫{
public void 吃(英雄 肉){
英雄a =英雄.被钩到 ( );
System.out.println (“Fresh Meet”);..
}
}
class 钩子{
static英雄 被钩到了(英雄 肉){
return 肉;
}
}
class英雄{
英雄.被钩到(){return 钩子.被钩到了(this);}
}
Public class FirstBlood{
public static void main(String[] w){
new 屠夫().吃(new 英雄());
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3. 构造器中调另一个构造器。 通俗的说要DIY一个装备, 由于只给了好几个部件不全的外壳(构造器),只好在这些外壳里找到适合的零件,最后组合成了一个可用的装备。
例3
public class 装备(){
int 敏捷值 = 0;
String 名字 = “?????”;
装备(int 属性点){
敏捷值 = 属性点;
System.out.println(“这个装备的敏捷值是” + 敏捷值);
}
装备(String 称呼){
System.out.println(“这个装备的名字是” + 称呼);
名字=称呼;
}
装备(String 名字, int 属性点){
this(属性点);
this.名字=名字; // this只能调用一个构造器
System.out.println(“名字与属性点”);
}
装备( ){
this(“蝴蝶”, 25);
System.out.println(“默认的构造器”);
}
void 显示敏捷值(){
System.out.println(“敏捷值为”+敏捷值+”名字为”+名字);
}
public static void main(String[] z){
装备 x=new 装备();
x.显示敏捷值();
}
}
输出结果:
这个装备的敏捷值是25
名字与属性点
默认构造器
敏捷值为25名字为蝴蝶