为了账号安全,请及时绑定邮箱和手机立即绑定

可以使用组合而不是继承来实现多态吗?

可以使用组合而不是继承来实现多态吗?

婷婷同学_ 2021-07-09 15:46:52
我正在学习Java,我知道什么是继承和组合,我看到了很多使用继承展示多态的例子,所以我的第一个问题是,可以使用组合来完成吗?如果是,请举例说明。我的第二个问题是,可以说 polymorphysim 基本上是方法重载和/或方法覆盖吗?如果是,那为什么?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

第一个问题

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

  • 通过类继承class A extends B

  • 通过接口实现class A implements C

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

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

class X implements C

{

    public String getName() {...}

    public int getAge() {...}

}

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


class A implements C

{

    private C x=new X();

    public String getName() {return x.getName();}

    public int getAge() {return x.getAge();}

第二个问题

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

  • 方法重载包括创建一个与同一类中的其他(可能继承的)方法同名但具有不同签名(=参数编号或类型)的新方法。添加新方法是可以的,但这不是多态的目的。

  • 方法覆盖包括将新主体设置为继承的方法,以便此新主体将在当前类中执行,而不是在继承方法的主体中执行。这是多态的一个优点,但也不是它的基础。

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


查看完整回答
反对 回复 2021-07-14
  • 3 回答
  • 0 关注
  • 202 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信