java - 继承和多态之间的主要区别是什么?

标签 java oop inheritance polymorphism

今天在模块开卷考试结束时向我提出了这个问题,我发现自己迷路了。我正在阅读 Head first Java,这两个定义似乎完全相同。我只是想知道我自己的主要区别是什么。我知道有很多与此类似的问题,但我没有看到任何一个可以提供明确的答案。

最佳答案

继承是指“类”派生自现有“类”。因此,如果你有一个 Person 类,那么你就有一个 Student 类,它扩展了 PersonStudent 继承 Person 拥有的所有东西。您在 Person 中的字段/方法上放置的访问修饰符有一些细节,但这是基本思想。例如,如果您在 Person 上有一个私有(private)字段,则 Student 将看不到它,因为它的私有(private)和私有(private)字段对子类不可见。

多态性处理程序如何决定它应该使用哪些方法,这取决于它拥有什么类型的东西。如果你有一个 Person,它有一个 read 方法,并且你有一个 Student,它扩展了 Person,它有自己的 read 实现,调用哪个方法由运行时决定,具体取决于您是 Person 还是 Student。这有点棘手,但如果你做类似的事情

Person p = new Student();
p.read();

Student 上的 read 方法被调用。这就是多态性的作用。你可以做这个分配,因为 Student 是一个 Person,但是运行时足够聪明,可以知道 p 的实际类型学生

请注意,不同语言的细节有所不同。例如,您可以在 javascript 中进行继承,但它与在 Java 中的工作方式完全不同。

关于java - 继承和多态之间的主要区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308178/

相关文章:

java - 蒙特卡罗在多个线程上计算 Pi

java - 如何使用hibernate连接四个表

java - 在不使用 'F' 键的情况下在 intellij 中进行调试

java - 这个简单的 JPQL 查询究竟是如何工作的?

node.js - Mongoose 模式继承和模型填充

oop - 属性依赖注入(inject)不违反封装原则吗?

ruby-on-rails - Rails 检查记录是否在第一位

php - 使用 PHP OOP 从数据库中检索 mysql 信息

c# - 如何在调用自己的植入之前强制继承类的方法实现调用基方法?

Java继承: How can you find which subclass an object belongs to?