Java继承设计:什么时候用?怎么设计复杂继承结构?一篇讲清楚

张开发
2026/4/19 21:11:31 15 分钟阅读

分享文章

Java继承设计:什么时候用?怎么设计复杂继承结构?一篇讲清楚
继承是Java面向对象的三大特性之一但很多人在实际写代码时容易犯两个错误一是看到重复代码就用继承不管逻辑上合不合理二是面对复杂的继承体系不知道怎么下手。今天这篇文章把继承的使用条件和复杂结构的设计方法一次讲清楚。一、什么时候该用继承继承不能乱用。只有同时满足两个条件才应该考虑继承1. 多个类之间存在重复的属性或行为2. 子类是父类的一种is-a关系✅ 正确案例学生和老师都有姓名、年龄而且学生是人老师也是人。父类叫Person合理。项目经理和程序员都有姓名、工资而且他们都是员工。父类叫Employee合理。❌ 错误案例程序员和手机都有id、名称就把它们抽出一个叫“商品”的父类语法上没错但逻辑上大错特错——程序员不是商品不满足is-a关系。结论不要强行把所有类都塞进一个继承体系里。符合条件才用不符合就别用。二、复杂继承结构怎么设计当涉及的类比较多、层级比较复杂时别在脑子里硬想用画图法。以这个需求为例安卓手机品牌、价格打电话、发短信、NFC苹果手机品牌、价格打电话、发短信笔记本电脑品牌、价格编程第一步画图从下往上先画出所有具体的子类安卓、苹果、笔记本然后找共同点。安卓和苹果都是手机抽出一个Phone父类把品牌、价格、打电话、发短信放进去。安卓保留NFC苹果没有独有内容。手机和笔记本都是智能设备再抽出一个SmartDevice父类把品牌、价格放进去。画图的方向是从下往上先有子类再抽父类。第二步写代码从上往下写代码的方向正好相反从上往下先写父类再写子类。因为子类要继承父类父类得先存在。第三步代码实现// 最高层父类 public class SmartDevice { String brand; double price; } // 一级子类手机 public class Phone extends SmartDevice { public void call() { System.out.println(利用手机打电话); } public void sendMessage() { System.out.println(利用手机发短信); } } // 二级子类安卓 public class Android extends Phone { public void nfc() { System.out.println(安卓手机可以使用NFC功能); } } // 二级子类苹果 public class Ios extends Phone { // 没有独有内容类体可以为空 } // 一级子类笔记本电脑 public class Laptop extends SmartDevice { public void coding() { System.out.println(正在利用笔记本电脑进行编程); } }第四步测试public class Test { public static void main(String[] args) { Android a new Android(); a.brand 华为; a.price 4999; a.call(); // 来自Phone a.nfc(); // 安卓独有 Ios i new Ios(); i.brand 苹果; i.price 5999; i.call(); // 来自Phone Laptop l new Laptop(); l.brand 联想; l.price 6999; l.coding(); // 笔记本独有 } }三、设计流程总结步骤方向做什么画图从下往上先画子类再抽父类逐层分类写代码从上往下先写父类再写子类逐层实现记住画图和写代码方向相反。写在最后继承用得好代码复用率高用得不好逻辑混乱、维护困难。两个核心条件重复内容 is-a关系。一个设计原则符合条件才用不强求。复杂结构用画图法从下往上抽共性从上往下写代码。

更多文章