【问题标题】:Polymorphism concept in java [duplicate]java中的多态概念[重复]
【发布时间】:2025-11-29 22:50:01
【问题描述】:

下面的代码有什么区别

  1. AbstractClass object = new SubClass();(SubClass是对AbstractClass的扩展类)

  2. 子类对象 = new SubClass();

在这两种情况下,子类都扩展了抽象类并实现了抽象类的方法

【问题讨论】:

  • 没区别,我发现
  • @HovercraftFullOfEels:这个问题不是在问界面。
  • @Makoto:没错,但概念是一样的。无论如何,这个问题被问得如此频繁,令人惊讶的是,OP 在发布之前没有找到重复项。
  • @Makoto 但是编码到接口的原则对于抽象类是相同的。事实上,你可以用“类型层次结构中最通用的类​​型”来交换“接口”,不是吗?
  • @Seelenvirtuose:如果 OP 询问“我为什么要...?”,那么是的,这将是一个合适的副本。但是,在使用具体类和抽象类时(尤其是在具体实例实现了其他方法的情况下)存在显着差异。

标签: java polymorphism


【解决方案1】:

首选第一个:您要声明一个更通用类型的变量,如果需要,您可以多态地将它替换为另一个对象实例,只要它也从同一个抽象类。

在 GoF 书中,他们将这一原则表述为“编程到接口,而不是实现”(从技术上讲,AbstractClass 不是接口,它是一个抽象类,但同样适用。)

【讨论】:

  • 感谢您澄清疑问
  • @user2514421 如果这个答案对你有帮助,请不要忘记accept它,只需点击它左边的复选标记;)