【问题标题】:Polymorphism and inheritance relationship多态性和继承关系
【发布时间】:2020-10-31 08:20:30
【问题描述】:

所以我正在阅读第一本 Java 书籍,当它解释继承之后,它就进入了多态性,而没有说明它们是如何连接的或有什么好处。

它只是说它使您的代码灵活,其他人可以重用您的代码。 老实说,这太令人困惑了。我知道什么是继承,但不能说我理解多态性。

我曾尝试查看一些 YouTube 视频,我从多态性中了解到的是,您有一个超类和子类,并且您使用数组循环遍历子类以执行某些功能。

【问题讨论】:

  • 继承用于代码重用性,而其他代码多态性用于应用覆盖方法的运行时实现
  • 您好,Mir,感谢您的提问。作为一个建议,尽量保持问题的简洁和客观。此外,尝试使用搜索来查找类似的问题。由于这是一个基本的 Java 概念,其他人肯定也有同样的问题。示例:stackoverflow.com/questions/11732422/…

标签: java oop inheritance polymorphism


【解决方案1】:

继承不是为了代码重用,而是为了替换。
在考虑继承时,代码重用是偶然的

许多开发人员在考虑继承时会考虑可重用性,但请注意,这是错误的推理。
比起继承,您应该更倾向于使用组合来实现代码的可重用性。

当您想到替换时,您可以想到继承。

了解多态性的一个实际示例是查看名为“策略”的设计模式。

策略允许在运行时更改算法而不更改编排器组件。

例如,想象一个视频游戏,当您管理一些使用不断进化的武器的士兵时。

主要算法(协调器算法)是关于移动士兵并击中任何敌人。
1 级,你有一把刀。
第 2 级,您将拥有一把枪。
3级,你会有炸弹。 等等。

你不想在你的主算法中明确处理任何类型的武器,你想要一个像这样的伪代码,比如说一个类Soldier

hit() {
   weapon.use(); // so generic ! 
} 

而不是:

hit() {
  if(weapon instance of Knife)
     ....
  else if(weapon instance of Gun) 
     ....
  else if(weapon instance of Bomb) 
     ....
  // what if you create another weapon for a further level...you would have to alter this class to add another 'else if' clause, bad!
} 

因此,要使用更简洁和可靠的第一种方式,您必须利用多态性,通过使用适当的子类(KnifeGuBomb)实现use 方法。

多态性 = weapon 在运行时可以采用多种形式/结构/行为。

所以在这种情况下,您使用composition 在运行时更改使用的武器,并且您使用多态性让编排器不知道使用的确切武器。

它使代码灵活、健壮、易于维护。

【讨论】:

    【解决方案2】:

    用于代码可重用性的继承,而在多态中,您重载了一个函数,该函数对方法/函数使用相同的名称但能够执行不同的任务,编译器知道何时使用,因为它们的签名不同,即它们的参数可能是不同或返回类型等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多