java集合中多态的核心是用父类或接口类型声明集合并存入子类实例,运行时动态调用各自重写的方法;它要求继承或实现关系,支持统一管理、灵活扩展,但不可直接调用子类特有方法,且相比数组更安全灵活。

用父类引用统一管理子类对象
例如定义抽象类 Animal,子类 Dog 和 Cat 都重写了 makeSound() 方法:
- 声明集合:
List<animal> animals = new ArrayList();</animal> - 添加对象:
animals.add(new Dog()); animals.add(new Cat()); - 遍历时调用
animals.get(i).makeSound(),JVM 在运行期根据实际对象类型执行对应逻辑,无需 if-else 分支
用接口实现更灵活的多态组合
比抽象类更松耦合。定义接口 Drawable,让 Circle、Rectangle、Text 各自实现 draw():
List<drawable> shapes = new ArrayList();</drawable>shapes.add(new Circle()); shapes.add(new Text());- 新增 Triangle 只需实现
Drawable,原有遍历代码完全不用改
不能直接调用子类特有方法
多态集合只暴露父类/接口声明的方法。若 Dog 有独有方法 fetchBall():
-
animals.get(0).fetchBall()编译失败——编译器只认Animal类型 - 必须先判断再转型:
if (animals.get(0) instanceof Dog) ((Dog) animals.get(0)).fetchBall();
集合 vs 数组:长度可变 + 类型安全
相比 Animal[],List<animal></animal> 更实用:
- 动态增删元素,不用预估容量
- 泛型
<animal></animal>提供编译期类型检查,避免存入无关类型(如误加String) - 不依赖
Object[]这种“万能容器”,语义清晰、IDE 支持好
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











