Oop 多态性方法或类

Oop 多态性方法或类,oop,polymorphism,Oop,Polymorphism,我想更多地了解oop中的多态性,它的主题与任何特定语言(c++、java、python)都不相关。 我想学习和理解多态性的真实形式(撇开语言的IDOM不谈) 背景: 在一次电话采访中,我被要求解释多态性? 我的答案是:多态性与方法有关,通过重载(静态绑定)和重写(动态绑定)实现。解释了重载和重写之间的区别 面试官的回答是我错了,多态性与课程而不是方法有关。我非常不同意,但这家伙是技术主管,毕业于哥伦比亚大学,拥有计算机科学学士和硕士学位(大约15-20年的工作经验),我来自一所州立大学,拥有计算

我想更多地了解oop中的多态性,它的主题与任何特定语言(c++、java、python)都不相关。 我想学习和理解多态性的真实形式(撇开语言的IDOM不谈)

背景: 在一次电话采访中,我被要求解释多态性? 我的答案是:多态性与方法有关,通过重载(静态绑定)和重写(动态绑定)实现。解释了重载和重写之间的区别


面试官的回答是我错了,多态性与课程而不是方法有关。我非常不同意,但这家伙是技术主管,毕业于哥伦比亚大学,拥有计算机科学学士和硕士学位(大约15-20年的工作经验),我来自一所州立大学,拥有计算机科学学士学位(<4年的工作经验)

当我们谈论OOP时,最常见的情况是,术语
多态性
用于描述我们使用继承时的对象行为,因此我们可以使用子类型的对象,就好像存在基类的对象一样(这些子类型的对象变为多态性,它们有两种形式-自身类型和基类类型)

例如,如果我们有一个表示整数和实数的对象层次结构,其中有base
Number
class:

         Number
        /     \
       /       \
      /         \
  Integer      Real
每个类定义自己的操作集,例如
add
multiply
。现在,我们可以使用类型为
Integer
对象
,既可以作为
整数
,也可以作为
数字
(与
实数
复数
相同)-因此该对象是多态的,它可以表示两种类型(类):

这就是
子类型多态性的要点,现在我们可以定义更多的数字子类型(例如,浮点精度更好但处理速度较慢的实数类型)。同时,
f
函数将保持原样,因为它不依赖于特定类型

请注意,
多态性
也可用于描述函数的行为,例如,当我们使用相同的名称但不同的参数声明函数,并且编译器选择在特定情况下使用哪个实现时(示例来自:


还有
多态性
通用函数/类(模板)

最常见的是,当我们谈论OOP时,术语
多态性
用于描述我们使用继承时的对象行为,因此我们可以使用子类型的对象,就像存在基类的对象一样(这些子类型的对象变为多态性,它们有两种形式-自身类型和基类类型)

例如,如果我们有一个表示整数和实数的对象层次结构,其中有base
Number
class:

         Number
        /     \
       /       \
      /         \
  Integer      Real
每个类定义自己的操作集,例如
add
multiply
。现在,我们可以使用类型为
Integer
对象
,既可以作为
整数
,也可以作为
数字
(与
实数
复数
相同)-因此该对象是多态的,它可以表示两种类型(类):

这就是
子类型多态性的要点,现在我们可以定义更多的数字子类型(例如,浮点精度更好但处理速度较慢的实数类型)。同时,
f
函数将保持原样,因为它不依赖于特定类型

请注意,
多态性
也可用于描述函数的行为,例如,当我们使用相同的名称但不同的参数声明函数,并且编译器选择在特定情况下使用哪个实现时(示例来自:


还有
多态性
通用函数/类(模板)

您是否尝试过搜索现有问题?我肯定他们已经报道了?也就是说,多态性是一个宽泛的概念,但多态面向对象代码最重要的方面是它允许一个对象属于多个类型。我理解多态性“允许一个对象属于多个类型”。所有这些都是通过编写多态方法(没有定义任何方法的类是什么(我是指一个空白类))。所以我的观点是多态性是通过编写多态方法来实现的。@linuxWiz98这就是你似乎出错的地方。多态替换不是通过重写实现的。多态替换是通过继承(类扩展)实现的。无需重写子类中的方法以利用多态性。如果
a
是具有
doSomething
方法且
B扩展了a
的类,则
a
类型的引用可以引用
a
B
实例,而无需重写
doSomething
B
中。现在,如果我们讨论运行时多态性,您就可以真正开始讨论重写方法了。我想讨论方法重载(静态绑定)和方法重写(动态绑定)在任何OOP语言中实现多态性的两种方法。对于要成为多态性的类,没有特殊的删除(多态性类a(对象)使其成为多态性)。我的观点是,多态性是通过编写多态性方法来实现的,这些方法有助于根据被调用方法的签名更改类的行为(我认为人们只是停留在多态性是类如何改变它们的行为,然后他们认为它只与类有关,他们忘记了它是如何实现的)。我认为我们编写多态方法,而不是多态类(类只是包含泛型(基类)和特殊属性组(数据字段、方法)的容器(儿童类)你有没有尝试过搜索现有的问题?我相信他们已经涵盖了这一点?也就是说,多态性是一个广泛的概念,但是mos
function Add(x, y : Integer) : Integer;
begin
    Add := x + y
end;

function Add(s, t : String) : String;
begin
    Add := Concat(s, t)
end;

begin
    Writeln(Add(1, 2));                   (* Prints "3"             *)
    Writeln(Add('Hello, ', 'World!'));    (* Prints "Hello, World!" *)
end.