首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >论多态性

论多态性
EN

Stack Overflow用户
提问于 2015-07-06 00:33:44
回答 3查看 177关注 0票数 2

我读过许多关于堆栈溢出的关于多态性的问题。这个问题是一个构造我的想法的问题,因为我已经阅读和研究了很多,以至于我有很多想法。我需要评论和批评我的想法多态。我将使用Java来演示我的想法。

多态性是指在谈论某个实体时具有不同形式的特征。可以通过以下方式实现这一目标:

  • 派生类从基类继承所有可见的方法,因此可以override某些方法的行为。例如: 类System.out.println(“我正在使用形状对象绘图”);}类矩形扩展形状{ void (){ //此方法是覆盖System.out.println(“我使用矩形对象绘图”);}}

在这里实现多态性的方法是,如果在运行时将draw()Rectangle的实例一起使用,则将调用Rectangle类中的draw()实现。

由于矩形是形状,多态是这样一个事实,即draw()采取了不同的形式,这取决于调用它的上下文。这也被称为遗传多态性。

  • 实现多态性的另一种方法是通过接口。 接口车辆{ void ();}类汽车实现车辆{ void (){System.out.println(“汽车在移动!”);}类平面实现车辆{ void (){System.out.println(“飞机在飞行!”);} //我们在编译时声明一个类型为Vehicle //的对象,someVehicle的具体实现不知道//,因此可以实现多态性,因为someVehicle可以//或者是一个Car或平面,这取决于在运行时使用//来实例化它的具体类。车辆someVehicle;
  • 用户定义的操作符重载(不是在Java,而是在C++中)

在Java中,操作符重载的一个例子是+操作符,根据操作数的不同,+执行特定的功能。如果+被应用于字符串,则将它们连接起来。如果它被应用于整数,它会进行算术加法。

现在,方法重载是否也是实现多态性的一种方法?在我对多态的理解中,我错过了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-06 02:08:21

多态性一词的意思是“多种形式”

您给出的两个示例是绝对有效的多态示例:

  • 在第一个例子中,您有“许多形式”的“绘制”功能,这取决于您所调用的“绘制”对象是哪种形状。
  • 在第二种情况下,您有“多种形式”的“移动”功能,这取决于车辆。

由于后期绑定,将调用的实际方法是在运行时决定的。

实际上,这两个示例非常相似,它们都是子类型的示例,这是您在Java中实现多态性的方式。

注意,在Java中需要子类型,因为Java是一种静态类型语言。在Smalltalk这样的动态类型化语言中,即使对象的类不属于同一个类层次结构,拥有不同的“绘制”方法实现也足够了。

现在,关于方法重载:确实,如果您定义了接收不同参数类型的方法的多个版本,那么该方法也会有“多个表单”。

不同的是,在这种情况下,--在编译时中决定调用哪种方法。这就是为什么很多人将方法重载称为静态多态

然而,由于它是静态的,并且基本上可以通过为方法指定不同的名称并根据使用的类型决定调用哪一个来实现相同的事情,许多人还会说方法重载实际上不是多态。

我认为这基本上取决于您想要使用的“多态性”的定义,但我希望上面的解释有助于澄清差异。

票数 1
EN

Stack Overflow用户

发布于 2015-07-06 00:52:19

我认为您正在与java中发生的其他事情混淆。在其他编程语言(如C++ )中,操作符重载是一种多态形式,但是在java中,操作符重载是in和booleans (也是String)和扩展基本java.lang.Object的所有其他语言之间的区别。语言设计人员决定不让操作符重载类,因为它可能非常混乱。因此,在Java中没有有效的操作符多态性,因为除了toString()方法之外,您不能定义自己的运算符或覆盖其他操作符,但在我看来,这确实是一个接口。我认为您不能说+(用于字符串)运算符在java中是操作符重载的一个例子,即使使用字符串,它也是正在调用的toString()方法,在我看来,这并不是真正的操作符重载,因为运算符只有在应用有关执行操作顺序的规则时才有这个术语。如果您只有一个操作符,那么将字符串连接在一起的+就没有应用到计算顺序的规则,因此它是一个语法问题。您有用于+、-和浮动的运算符,但是不能重载它们,所以这不是多态。

票数 0
EN

Stack Overflow用户

发布于 2015-07-06 00:38:42

多态性的行为方式与您已经解释过的一样,但并不是实现覆盖先前定义的方法的新方法的实际操作。多态更多的是一个抽象的概念。一般而言:

多态是指对象具有多种形式的能力。OOP中最常见的多态性用法发生在父类引用用于引用子类对象时。

更多信息也可以找到这里

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31236388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档