【发布时间】:2018-04-10 06:24:28
【问题描述】:
我想更多地了解 oop 中的多态性,该主题与任何特定语言(c++、java、python)都不相关。 我想以真实的形式学习和理解多态性(抛开语言的惯用语)。
背景: 我在电话采访中被要求解释多态性? 我的回答:多态性与方法有关,是通过重载(静态绑定)和覆盖(动态绑定)来实现的。解释了重载和覆盖之间的区别
面试官的回答是我错了,多态性与类而不是方法有关。我非常不同意,但这个人是技术主管,毕业于哥伦比亚大学,拥有计算机科学学士学位和硕士学位(大约 15-20 年的经验),而我来自州立大学,拥有计算机科学学士学位(
【问题讨论】:
-
您是否尝试过搜索现有问题?我确定他们已经涵盖了这个?也就是说,多态是一个宽泛的概念,但多态面向对象的代码最重要的方面是它允许一个对象属于多个类型。
-
我理解多态性'允许一个对象属于多个类型'。所有这些都是通过编写多态方法来实现的(什么是没有定义任何方法的类(我的意思是一个空白类))。所以我的观点是多态性是通过编写多态方法来实现的。
-
@linuxWiz98 这就是你似乎出错的地方。 多态替换不是通过覆盖来实现的。 多态替换是通过继承(类扩展)实现的。无需覆盖子类中的方法来利用多态性。如果
A是具有doSomething方法和B extends A的类,则A类型的引用可以同时引用A和B实例,而无需覆盖 i>doSomething在B。现在,如果我们谈论运行时多态性,那么您就可以真正开始谈论覆盖方法了。 -
我想同时解决方法重载(静态绑定)和方法覆盖(动态绑定)这两种我们可以在任何 OOP 语言中实现多态性的方法。对于成为多态的类,没有特殊的声明(多态类 A(object) 使多态)。我的观点是多态性是通过编写多态方法来实现的,这些方法有助于根据被调用方法的签名来改变类的行为(我认为人们只是停留在多态性是类如何改变它们的行为,然后他们认为它只与类有关,他们忘记了它是如何实现的)。
-
我认为我们编写的是多态方法而不是多态类(类只不过是具有通用(基类)和特定(子类)的属性组(数据字段、方法)的容器)
标签: oop polymorphism