java中的继承和多态的区别

提问

多态:写一段通用代码,不用区分是狗还是猫,直接调用 eat,自动匹配对应的实现。,那我子类继承了父类的方法直接调用父类的这个吃方法不就行吗,这个不是继承吗,为什么说是多态呢

核心问题来了,我帮你把两个场景分开,一眼看懂

疑问:子类继承了父类 eat,直接调用 eat 不就行了?这不就是继承?为啥叫多态?

先分两种完全不一样的写法:

场景 1:子类自己调用方法(只有继承,没有多态)

java

运行

复制代码
Dog dog = new Dog();
dog.eat();

这里变量dog的类型就是 Dog。

  • 因为继承,Dog 拥有 eat 方法。
  • 如果 Dog 重写了 eat,就执行 Dog 的 eat;没重写,就执行父类 Animal 的 eat。

✅ 这里用到了继承 ,但这不是多态 。 特点:写代码的时候就确定,这个东西一定是狗。

场景 2:父类类型变量,接收不同子类对象(继承 + 重写 → 产生多态效果)

java

运行

复制代码
Animal a1 = new Dog();
Animal a2 = new Cat();
a1.eat();
a2.eat();

变量a1的类型是 Animal(动物),写代码的时候,只知道它是动物,不知道它到底是狗还是猫。 运行的时候才知道里面装的是狗还是猫,自动执行对应子类重写的 eat。

👉 继承只是提供基础,多态是【同一个变量类型,可以装很多不同子类,一行代码自动适配不同实现】


最关键对比

只靠继承能干啥?

你想调用 eat,你必须明确写死是什么动物: 要喂狗 → 创建 Dog 对象 要喂猫 → 创建 Cat 对象 写两个单独调用:

java

运行

复制代码
Dog dog = new Dog();
dog.eat();

Cat cat = new Cat();
cat.eat();

如果以后新增兔子、鸭子,你就要继续新增调用代码。

用上多态能干啥?

写一段通用的喂动物方法 ,不用管传进来的到底是什么动物

java

运行

复制代码
public void feed(Animal animal){
    animal.eat();
}

你随便传:

java

运行

复制代码
feed(new Dog());
feed(new Cat());
feed(new Rabbit()); //新增兔子,这里代码完全不用改!

feed这个方法从头到尾只写一次,不用为每一种动物单独写一段调用代码。

重点: 继承让狗、猫都拥有 eat 这个方法; 多态让 feed 这一段通用代码,可以适配所有 Animal 子类。

一句话总结

  • 继承:狗本身就有 eat 方法(有这个能力)
  • 多态:我写一个通用函数,不管你传狗、猫、兔子,统一调用 eat,自动执行各自版本

再打比方

继承:狗继承动物,学会了吃饭;猫继承动物,学会了吃饭。 只靠继承的写法:单独喊狗吃饭,单独喊猫吃饭。

多态:写一句指令「让这个动物吃饭」,交给谁,谁就按自己的吃法吃。 这个指令不用修改,来狗就狗啃骨头,来猫就猫吃鱼。 👉 这个一段代码适配多种子类的特性,才叫多态。

相关推荐
Wang's Blog8 分钟前
Java 项目部署之 Docker工具快速入门: Docker 镜像仓库
java·docker
企智汇-项目管理软件16 分钟前
离散制造管理系统怎么选?一套系统管住从研发到交付的全周期
java·人工智能·制造·项目经理·项目管理软件·项目管理系统·项目管理软件工程
IT研究室30 分钟前
最新计算机毕业设计选题推荐-基于spring boot的幼儿园管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
会编程的吕洞宾31 分钟前
Spring Cloud Gateway限流实战 Redis令牌桶算法+熔断降级
java·后端·spring
Wang's Blog43 分钟前
Java 项目部署之 Docker工具快速入门: DockerCompose 部署微服务集群
java·docker·微服务
BullSmall1 小时前
SonarQube 9.9.8-community 适配 Jenkins 版本说明
java·前端·jenkins
威哥爱编程1 小时前
【AI全栈12-10】Spring Boot 用多模态做商品图审核 / 发票识别
java·spring boot·后端
轮子大叔1 小时前
Java8和Java17常见区别
java
威哥爱编程1 小时前
【AI全栈12-09】Spring Boot 用流式输出做打字机对话:点下去不再干等
java·spring boot·后端
威哥爱编程1 小时前
【AI全栈12-08】Spring Boot 用 MCP 统一接入内部系统:让 AI 接一次,全公司复用
java·spring boot·后端