[第 7 章](07.html#21PMQ2-bc1530b4c4784270ae8a31a7038f8341"Chapter 7. Members Inheritance and Polymorphism")、*成员继承和多态性*教您如何控制子类是否可以覆盖成员。我们将利用最令人兴奋的面向对象特性之一:多态性。我们将利用 JShell 轻松理解类型转换。我们将声明使用类实例执行操作的方法。
[第 9 章](09.html#2F4UM2-bc1530b4c4784270ae8a31a7038f8341"Chapter 9. Advanced Contract Programming with Interfaces")*带接口的高级合约编程*深入探讨了带接口的合约编程。我们将使用接收接口作为参数的方法。我们将了解向下转换如何处理接口和类,并将接口类型的实例视为不同的子类。JShell 将使我们能够轻松理解类型转换和向下转换的复杂性。我们将处理更复杂的场景,其中我们将结合类继承和接口继承。
[第 10 章](10.html#2KS221-bc1530b4c4784270ae8a31a7038f8341"Chapter 10. Maximization of Code Reuse with Generics")*泛型代码重用的最大化*介绍了如何使用参数多态性。我们将学习如何通过编写能够处理不同类型对象的代码来最大化代码重用,这些对象是实现特定接口或类层次结构包含特定超类的类的实例。我们将使用接口和泛型。我们将创建一个使用受约束泛型类型的类。由于泛型,我们将对多种类型使用泛型类。
*`VirtualHorse`:该类扩展了`VirtualDomesticMammal`类。我们可以继续用额外的子类专门化`VirtualDomesticMammal`类,直到我们达到`VirtualHorse`类。例如,我们可以创建一个`VirtualHerbivoreDomesticMammal`子类,然后使`VirtualHorse`类从中继承。但是,我们必须开发的 Web 服务不需要任何介于`VirtualDomesticMammal`和`VirtualHorse`之间的中间类。`VirtualHorse`类概括了我们应用程序中虚拟马所需的字段和方法。`VirtualHorse`类的不同子类将代表虚拟马品种的不同家族。
*`VirtualHorse`:该类扩展了`VirtualDomesticMammal`类。我们可以继续用额外的子类特化`VirtualDomesticMammal`类,直到我们达到`VirtualHorse`类。例如,我们可以创建一个`VirtualHerbivoreDomesticMammal`子类,然后使`VirtualHorse`类从中继承。但是,我们必须开发的 Web 服务不需要任何介于`VirtualDomesticMammal`和`VirtualHorse`之间的中间类。`VirtualHorse`类概括了我们应用程序中虚拟马所需的字段和方法。`VirtualHorse`类的不同子类将代表虚拟马品种的不同家族。
在[第 7 章](07.html#21PMQ2-bc1530b4c4784270ae8a31a7038f8341"Chapter 7. Members Inheritance and Polymorphism")*成员遗传与多态性*中,我们研究了多态性。下一个示例并不代表最佳实践,因为多态性是使其工作的方法。然而,我们将编写一些不代表最佳实践的代码,只是为了进一步了解类型转换。
在[第 7 章](07.html#21PMQ2-bc1530b4c4784270ae8a31a7038f8341"Chapter 7. Members Inheritance and Polymorphism")*成员继承与多态性*中,我们研究了多态性。下一个示例并不代表最佳实践,因为多态性是使其工作的方法。然而,我们将编写一些不代表最佳实践的代码,只是为了进一步了解类型转换。
有时候,我们非常幸运,一开始我们就有机会遵循最佳实践。然而,很多时候我们并没有这么幸运,我们不得不从事那些没有遵循最佳实践的项目。在这些情况下,我们可以使用我们最喜欢的 IDE 和其他辅助工具提供的功能重构现有代码,并生成面向对象的代码,从而促进代码重用并减少维护方面的麻烦,而不是遵循生成容易出错、重复且难以维护的代码的同样的错误做法。