本文目录导读:

这是一个非常经典的Java综合案例,通常用于演示面向对象编程(封装、继承、多态)、集合框架、算法设计(排序、比较)以及策略模式。
既然你问“优势在哪队”,我不能直接给一个固定答案(因为程序是模拟的),但我可以为你设计一个完整的、可运行的Java模拟引擎,并通过代码逻辑告诉你决定胜负的评判标准是什么。
这个案例的逻辑设定是:双方的战斗力由多维度属性加权得出,包括空中压制力、机动性及生存能力。
为了让你直观地看到“哪一队”赢,我设计了一个基于士兵装备(战斗机)质量的模拟程序,运行后,控制台会直接打印 “红方总战力为:XXX,优势在红方” 或 “蓝方总战力更高”。
以下是完整的综合Java案例代码(包含详细的注释),请复制并运行它:
核心抽象类(定义空中优势的标准)
import java.util.ArrayList;
import java.util.List;
// 抽象类:空中单位(战斗机)
// 核心逻辑:评估空中优势,我们不看人数,看“综合打击能力和生存能力”
abstract class AirUnit {
protected String name;
protected int radarRange; // 雷达探测范围(km)—— 代表“发现即摧毁”的能力
protected int stealthLevel; // 隐身能力(1-10)—— 代表“生存能力”
protected int maneuverability; // 机动性(1-10)—— 代表“格斗/规避能力”
protected int missileLoad; // 弹药挂载量(枚)—— 代表“持续火力”
public AirUnit(String name, int radarRange, int stealthLevel, int maneuverability, int missileLoad) {
this.name = name;
this.radarRange = radarRange;
this.stealthLevel = stealthLevel;
this.maneuverability = maneuverability;
this.missileLoad = missileLoad;
}
// 抽象方法:每个具体型号的战斗机有专属的“空战指数计算逻辑”(体现多态)
public abstract double calculateAirCombatScore();
// 模板方法:显示该飞机的详细数据(用于输出)
public void displayInfo() {
System.out.println(" 🛩️ 机型:" + name +
" | 雷达:" + radarRange + "km" +
" | 隐身:" + stealthLevel +
" | 机动:" + maneuverability +
" | 载弹:" + missileLoad +
" | 单机战力:" + String.format("%.2f", calculateAirCombatScore()));
}
// Getter 辅助方法(供子类计算时使用或外部读取)
public double getRadarRange() { return radarRange; }
public double getStealthLevel() { return stealthLevel; }
public double getManeuverability() { return maneuverability; }
public double getMissileLoad() { return missileLoad; }
}
具体机型实现(多态的体现)
// 具体:第四代战机(侧重机动与载弹,空战格斗型)
class FourthGenFighter extends AirUnit {
public FourthGenFighter(String name, int radarRange, int stealthLevel, int maneuverability, int missileLoad) {
super(name, radarRange, stealthLevel, maneuverability, missileLoad);
}
// 计算逻辑:机动性和载弹量权重很高(近距格斗强),隐身加成较低
@Override
public double calculateAirCombatScore() {
// 公式:机动性*20 + 载弹量*1.5 + 雷达*0.1 + 隐身*5
return (getManeuverability() * 20) + (getMissileLoad() * 1.5) + (getRadarRange() * 0.1) + (getStealthLevel() * 5);
}
}
// 具体:第五代隐形战机(侧重超视距打击与生存,体系碾压型)
class FifthGenStealthFighter extends AirUnit {
public FifthGenStealthFighter(String name, int radarRange, int stealthLevel, int maneuverability, int missileLoad) {
super(name, radarRange, stealthLevel, maneuverability, missileLoad);
}
// 计算逻辑:隐身和雷达权重极高(先敌发现,先敌击落)
@Override
public double calculateAirCombatScore() {
// 公式:(隐身*30) + 雷达*0.5 + 机动性*10 + 载弹量*1.0
// 隐身是5代机的核心优势,权重拉满
return (getStealthLevel() * 30) + (getRadarRange() * 0.5) + (getManeuverability() * 10) + (getMissileLoad() * 1.0);
}
}
作战部队(两队PK的核心逻辑)
// 作战编队类:代表“红方”或“蓝方”
class AirCombatTeam {
private String teamName; // 队伍名字(红/蓝)
private List<AirUnit> units; // 队伍里的所有战机
public AirCombatTeam(String teamName) {
this.teamName = teamName;
this.units = new ArrayList<>();
}
// 向队伍中添加飞机
public void addUnit(AirUnit unit) {
units.add(unit);
}
// 计算队伍总战力(核心评判标准)
public double calculateTotalScore() {
double totalScore = 0;
for (AirUnit unit : units) {
totalScore += unit.calculateAirCombatScore();
}
return totalScore;
}
// 用于比较谁更强(返回布尔值给主程序使用)
public boolean isStrongerThan(AirCombatTeam opponent) {
return this.calculateTotalScore() > opponent.calculateTotalScore();
}
// 打印队伍明细
public void displayTeamInfo() {
System.out.println("");
System.out.println("===== " + teamName + "方参战编队明细 =====");
for (AirUnit unit : units) {
unit.displayInfo();
}
System.out.printf("🏆 %s方总战力指数:%.2f%n", teamName, calculateTotalScore());
}
public String getTeamName() { return teamName; }
}
主测试类(执行模拟对比)
public class AirSuperioritySimulator {
public static void main(String[] args) {
System.out.println("==============================================");
System.out.println(" 空中对抗模拟开始 —— 谁占据制空权?");
System.out.println("==============================================");
// ========== 构建蓝方战队:装备精良,全五代机 + 预警辅助 ==========
AirCombatTeam blueTeam = new AirCombatTeam("蓝");
blueTeam.addUnit(new FifthGenStealthFighter("F-35A", 180, 9, 7, 8));
blueTeam.addUnit(new FifthGenStealthFighter("F-22", 200, 10, 9, 6));
blueTeam.addUnit(new FifthGenStealthFighter("歼-20", 210, 9, 8, 8));
blueTeam.addUnit(new FourthGenFighter("阵风", 150, 4, 8, 12)); // 带了一小队4代半撑场面
// ========== 构建红方战队:数量多,经典四代机主力,少量五代 ==========
AirCombatTeam redTeam = new AirCombatTeam("红");
redTeam.addUnit(new FourthGenFighter("歼-16", 160, 3, 8, 12));
redTeam.addUnit(new FourthGenFighter("苏-35", 150, 4, 9, 10));
redTeam.addUnit(new FourthGenFighter("歼-10C", 140, 3, 9, 10));
redTeam.addUnit(new FourthGenFighter("米格-35", 130, 2, 8, 11));
redTeam.addUnit(new FourthGenFighter("歼-11BG", 145, 2, 7, 12)); // 数量压制,靠火力密度
// ========== 打印双方初始配置 ==========
blueTeam.displayTeamInfo();
redTeam.displayTeamInfo();
// ========== 执行优劣判定(核心算法逻辑) ==========
System.out.println("\n⚔️ 综合评估计算中......");
double blueScore = blueTeam.calculateTotalScore();
double redScore = redTeam.calculateTotalScore();
// 胜负判定逻辑
AirCombatTeam winner;
if (blueScore > redScore) {
winner = blueTeam;
} else if (redScore > blueScore) {
winner = redTeam;
} else {
// 平局极少见,但为了健壮性处理
System.out.println("🤝 双方战力完全持平,各自撤出战斗!");
return;
}
// ========== 最终结论输出 ==========
System.out.println("");
System.out.println("==============================================");
System.out.printf("✅ 判定结果:\n");
System.out.printf(" 蓝方战力: %.2f \n", blueScore);
System.out.printf(" 红方战力: %.2f \n", redScore);
System.out.println("==============================================");
System.out.printf("🚩 空中对抗的优势方是【%s方】!他们凭借体系化作战获得了制空权。%n", winner.getTeamName());
// 展示获胜亮点(使用继承的getName调用)
System.out.println("");
System.out.println("📌 分析:优势方在“隐身压制”或“机动格斗”上取得了决定性战果。");
System.out.println("==============================================");
}
}
运行结果分析(哪个队赢?)
在你运行上述代码后,由于算法权重设定为“第五代隐形飞机拥有极高的隐身与雷达加成”,通常蓝方会获胜。
你可以尝试修改 main 方法中的参数来测试“翻盘”:
- 让红方赢:把红方全部换成
FifthGenStealthFighter,并让红方的隐身 数值(10)比蓝方高。 - 测试数量优势: 给红方 增加 几架
歼-16(比如加到6-8架),看看总战力能否靠堆数量超越蓝方的精兵。
核心知识点回顾:
- 封装:
AirUnit里的属性都是protected,子类只能通过 getter 或自身计算访问。 - 继承:
FourthGenFighter和FifthGenStealthFighter都extends AirUnit。 - 多态:
AirCombatTeam的List<AirUnit>存储不同类型的飞机,调用calculateAirCombatScore()时动态绑定到子类算法。 - 集合框架:使用
ArrayList管理战队成员。 - 综合运用:将上述Java核心特性整合到一个军事模拟场景中。
你可以直接复制所有代码到IDEA中运行,控制台会自动告诉你“哪队占优”,这个案例在面试或考试中,重点考察的是你的代码设计分层能力(是否能把规则变化隔离在子类中)。