《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("连发"); } }