我正在学习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();}
}
第二个问题
不,多态不是方法重载和/或方法覆盖(实际上,重载与面向对象设计无关):
方法重载包括创建一个与同一类中的其他(可能继承的)方法同名但具有不同签名(=参数编号或类型)的新方法。添加新方法是可以的,但这不是多态的目的。
方法覆盖包括将新主体设置为继承的方法,以便此新主体将在当前类中执行,而不是在继承方法的主体中执行。这是多态的一个优点,但也不是它的基础。
简而言之,多态是一个类用作不同类/接口的能力。
添加回答
举报
0/150
提交
取消