跟着视屏敲了一个十分简单的代码小游戏,感触很深,让我对java面向对象的设计理念有了进一步的理解,以及前期所学的java基础内容得到了巩固。万物皆对象,编程时思维很清晰。
程序所应用到的大的知识点:
抽象类,继承,多态,构造方法(这个程序让我对构造方法有了深刻的认识)。
代码如下:
public class Test01 { // 测试类
public static void main(String[] args) {
Officer officer = new Officer("云腾"); // 实例化一个officer对象,名字叫云腾
officer.callToAttack(); // 调用officer无参数的callToAttack方法,所有人攻击
officer.callToAttack(officer.getSoldier()[0]); // officer命令第一个士兵去攻击
}
}
abstract class Soldier { // 创建一个抽象Soldier类
private String name; // 私有化成员变量
public Soldier(String name) { // 构造方法初始化成员变量name
this.name = name;
}
public String getName() { // 创建一个得到name的方法
return name;
}
// 行动
public void start() { // 准备战斗
System.out.println(getName() + "准备攻击");
}
public void end() { // 攻击完成
System.out.println(getName() + "攻击完成");
}
public abstract void attack(); // 攻击的抽象方法
public void action() { // 行为的过程,每个战士战斗的过程
start();
attack();
end();
}
}
class LandSoldier extends Soldier { // 陆军继承士兵
public LandSoldier(String name) {
super(name);
}
// 实现类中的抽象方法(陆军的攻击方法)
public void attack() {
System.out.println(getName() + "使用步枪");
}
}
class OceanSoldier extends Soldier { // 海军继承士兵
public OceanSoldier(String name) {
super(name);
}
// 实现类中的抽象方法(海军的攻击方法)
public void attack() {
System.out.println(getName() + "使用鱼雷");
}
}
class Officer extends Soldier { // 司令员继承士兵
private Soldier[] soldiers = new Soldier[2]; // 创建俩个私有战士,数组表示
public Officer(String name) { // 构造方法初始化数组
super(name);
soldiers[0] = new LandSoldier("张三");
soldiers[1] = new OceanSoldier("李四");
}
public Soldier[] getSoldier() { // 得到私有化后战士的名字
return soldiers;
}
// 司令员的攻击方式
public void attack() {
System.out.println(getName() + "使用手枪射击");
}
// 让所有的士兵发动攻击,包括自己
public void callToAttack() { // 所有人攻击
for (int i = 0; i < soldiers.length; i++) {
soldiers[i].action();// 每个士兵调用自己的的攻击方法
}
this.action();// 自己也参与攻击
}
// 让一个士兵去攻击
public void callToAttack(Soldier soldier) { // 命令其他士兵攻击,包括自己
soldier.action();
}
}
希望能帮助到像我一样的初学者