英雄联盟之方法重写重载的那些事

最近时间有点闲,点开LOL撸了一把。由于很久没撸,结果当然的被人虐成狗。当天晚上梦里全是复仇的场景,于是……

重写

先悄悄的告诉你我玩的英雄是VN,实在太脆弱,于是做梦都在想新建了一个VN号(B),自己又不想失去以前的号(A)的各种绚丽皮肤。
于是就由B继承了A的所有属性、操作,只是把A抗击打能力提高了8倍。这样我的新VN就厉害了,变成了坦克AD,想输都难了。我英雄为什么变得这么强,是因为我把以前脆弱的抗击打能力重做了一次让它变得更强。在我们JAVA程序里面就叫它重写。

代码清单如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
A薇恩,脆弱的薇恩
*/
public class OldVN {
//抗击打能力最多100无敌,VN原始版本抗击打能力为10
public int getFightAgainst(){
return 10;
}
}
/**
B重做后的薇恩
*/
public class NewVN extends OldVN{
//抗击打能力最多100无敌,VN重做版本抗击打能力提高8倍
public int getFightAgainst(){
return 80;
}
//开始玩游戏
public static void main(String[] args) {
//脆弱的VN
OldVN vn=new OldVN();
int oldFightAgainst = vn.getFightAgainst();
//重做后的VN
vn = new NewVN();
int newFightAgainst = vn.getFightAgainst();
System.out.println("脆弱VN抗击打能力"+oldFightAgainst+",重做VN抗击打能力"+newFightAgainst);
}
}
运行结果为:脆弱VN抗击打能力10,重做VN抗击打能力80

我们再来读一读重写(Overriding)的概念你能理解了么?

父类与子类之间的多态性,对父类的方法进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在JAVA中,子类可继承父类中的方法,而不需要重新编写相同的方法。
但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

重载

假如我交际特广在里面有人(英雄联盟开发团队),其实他们早就写了好把VN增强的方法,我只需要知道这个方法就可无敌。

代码清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class OldVN {
//抗击打能力最多100无敌,VN原始版本抗击打能力为10
public int getFightAgainst(){
return 10;
}
//抗击打能力自定义
public int getFightAgainst(int i){
//1、如果输入的抗击打能力小于0,抗击打能力默认为0
//2、如果输入的抗击能力大于100,抗击打能力默认为100
if(i<0){
i=0;
}else if(i>100){
i=100;
}
return i;
}
//开始玩游戏
public static void main(String[] args) {
//脆弱的VN
OldVN vn = new OldVN();
int oldFightAgainst = vn.getFightAgainst();
int newFightAgainst = vn.getFightAgainst(90);
System.out.println("脆弱VN抗击打能力"+oldFightAgainst+",重载VN抗击打能力"+newFightAgainst);
}
}

以上代码就是一个重载,我只需要调用有参数的方法就到达了我的目的,而不需要继承。

我们再来读一读 重载(Overloading) 的概念,你能理解么?

(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名方法同时存在,具有不同的参数个数/类型。
重载Overloading是一个类中多态性的一种表现。

(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载方法的区分标准。