《Java从入门到失业》第五章:继承与多态(5.1-5.7):继承
5.继承与多态
5.1为什么要继承
最近我儿子迷上了一款吃鸡游戏《香肠派对》,无奈给他买了许多玩具枪,我数了下,有一把狙击枪AWM,一把步枪AK47,一把重机枪加特林(Gatling)。假如我们把这些玩具枪抽象成类,类图的示意图大致如下:
我们发现,这3者之间有很多相同的属性和方法(红色部分)。有没有什么办法能够减少这种编写重复代码的办法呢?Java提供了继承来解决这个问题。我们可以在更高一层抽象一个枪类,在枪类里面编写这些重复的属性和方法,然后其余的枪都继承自枪类,它们只需要编写各自独有的属性和方法即可,使用继承优化后的类图设计如下:
在Java中,使用extends关键字来实现继承,我们把代码示例如下:
package com.javadss.javase.ch05;
// 枪类
class Gun {
private String name;
private String color;
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public void shoot() {
System.out.println("单发");
}
public void loadBullet() {
System.out.println("装弹");
}
}
// AWM类
class AWM extends Gun {
private String gunsight;
private String gunstock;
// 安装瞄准器
public void loadGunsight(String gunsight) {
this.gunsight = gunsight;
}
// 安装支架
public void loadGunstock(String gunstock) {
this.gunstock = gunstock;
}
}
// AK47类
class AK47 extends Gun {
private String gunsight;
// 安装瞄准器
public void loadGunsight(String gunsight) {
this.gunsight = gunsight;
}
// 连发
public void runingShoot() {
System.out.println("连发");
}
}
// 加特林类
class Gatling extends Gun {
private String gunstock;
// 安装支架
public void loadGunstock(String gunstock) {
this.gunstock = gunstock;
}
// 连发
public void runingShoot() {
System.out.println("连发");
}
}

![《Java从入门到失业》第五章:继承与多态(5.1-5.7):继承
[编程语言教程]](https://www.zixueka.com/wp-content/uploads/2024/01/1706711350-787b0f4248cf955.jpg)


