首页 > 解决方案 > 可以使用组合而不是继承来实现 Polymorphysim 吗?(在 Java 中)

问题描述

我正在学习 Java,我知道继承和组合是什么,我看到了许多使用继承的多态模拟示例,所以我的第一个问题是,可以使用组合来完成吗?如果是,请举一个小例子。

我的第二个问题是,可以说 polymorphysim 基本上是方法重载和/或方法重载吗?如果是,那为什么?

标签: javaoop

解决方案


第一个问题

在 Java 中可以通过两种方式实现多态:

  • 通过类继承class A extends B
  • 通过接口实现class A implements C

在后一种情况下,为了正确实现 A 的行为,可以通过组合来完成,使 A 委托给其他一些执行接口 C 中指定的任务的类。

示例:假设我们已经有一些实现接口 C 的类:

class X implements C
{
    public String getName() {...}
    public int getAge() {...}
}

我们如何创建一个具有与 X 相同行为的实现 C 的新类?像这样:

class A implements C
{
    private C x=new X();
    public String getName() {return x.getName();}
    public int getAge() {return x.getAge();}
} 

第二个问题

不,多态性不是方法重载和/或方法覆盖(实际上,重载与面向对象设计无关):

  • 方法重载包括创建一个新方法,该方法与同一类中的其他(可能继承的)方法具有相同的名称,但具有不同的签名(=参数编号或类型)。添加新方法是可以的,但这不是多态性的目的。
  • 方法覆盖包括为继承的方法设置一个新的主体,以便这个新的主体将在当前类中执行,而不是在继承的方法的主体中执行。这是多态性的一个优点,也不是它的基础。

简而言之,多态性是一个类被用作不同类/接口的能力。


推荐阅读