`
didasoft
  • 浏览: 164781 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

OOP基本概念之讨论:重载也是实现多态的一种方法吗?

阅读更多
多态(Polymorphism)是OOP的一个最重要和最基本的概念之一。不同的面向对象程序设计语言都有不同的实现多态的方法。最基本的方法就是inheritance加override了,当然还有其它的一些方法。

现在有一个问题:overload是否也是实现多态的方法之一?

Thinking in C++中认为:多态的实现方法只有一个,也就是virtual function。

而也有其它的一些人认为,实现多态的方法很多。你认为呢?

以下来自于国外一个Blog的讨论,也说明overload是否多态是个问题。大家一起讨论讨论。

链接来自于:http://www.scottcreynolds.com/

Polymorphism is the one that always gave me trouble when I was learning OOP because it sounds a hell of a lot more complicated than it is at root, but also because there is just so much to polymorphism once you get deeper and deeper into OOP.  At root, polymorphism means that one thing can have many shapes (or, in World of Warcraft, Polymorph is where a mage turns you into a sheep).  From Wikipedia:
polymorphism is behavior that varies depending on the class in which the behavior is invoked. For example, the result of bark() for a Dog would differ from the result of bark() for a Jackal; and in a more sophisticated animal-emulation program, bark() would differ for a Chihuahua and a Saint Bernard.

This definition is a little incomplete in my opinion.  I am going to borrow a line from Raymond Lewallen (who did a great series on the 4 principles of OOP a while back) where he says that while polymorphism can be coupled with inheritance (as is implied by the wikipedia definition above) it does not require inheritance.  You can see polymorphism at work in one class in the form of overloading.  You can see polymorphism at work when implementing interfaces (covered later) that allows you to treat one object type like another if they share common interfaces.  You can see polymorphism at work in inheritance via overriding inherited behaviors.  Generics available in C# 2.0 are a type of polymorphism at work (called parametric polymorphism).  A lot of that is way beyond the scope here.  I only want to discuss overloading and overriding here, because those are the least complicated and the most often encountered when you first begin OOP and this is just an overview article.  Polymorphism is one of those things that you can talk about for days and still not see the end of.  Because of the many places you can see it at work, it’s one of the hardest parts of OO to define, and to fully understand, until you see it from all its different sides.

Overloading is a type of polymorphism (sometimes called ad-hoc polymorphism) where you essentially have multiple functions that perform the same task, return the same thing, and have the same name.  They differ in the number and/or type of arguments passed in.  Some will say that method overloading is not polymorphism.  Others will say it is.  I’m not here to deal in academics.  In the real world, overloaded behavior is considered to be polymorphic behavior, at least in the sense that from the perspective of the consumer of the API it’s polymorphic, but maybe in the perspective of the author it’s just syntactic sugar for multiple methods.  Overloading is important to understand and is a key feature of OOP, and I’m putting it under polymorphism.  Deal.  If you know enough about it to argue with me about whether or not it goes here…this post ain’t for you bub. :P

分享到:
评论

相关推荐

    oop 事件 委托 多态 继承

    面向对象编程(OOP)是一种重要的编程范式,它基于对象和类的概念,提供了一种组织和管理代码的有效方式。本文将深入探讨OOP中的事件、委托、多态和继承等核心概念。 首先,让我们来看一下事件。在C#中,事件是一种...

    北大青鸟javaOOP多态Ch03作业全集.rar

    重载则是在同一类中创建多个方法,它们名字相同但参数列表不同,实现多态的一种方式。 4. 方法的动态绑定:在Java中,所有的方法调用都是动态绑定的,也就是说,直到运行时才能确定调用哪个具体的方法。这是基于...

    JavaOOP_第1章上机练习.zip

    Java面向对象编程(Object-Oriented Programming,简称OOP)是Java编程的核心概念,也是现代软件开发中的基础设计理念。在"JavaOOP_第1章上机练习.zip"这个压缩包中,我们可以预见到它包含了关于Java OOP的初步学习...

    多态的力量:在C#中实现灵活的代码设计

    在C#中,多态指的是能够以一种通用的方式处理不同类型的对象的能力,即同一个接口可以被不同的类实现,从而针对不同的对象执行不同的操作。这种能力极大地增强了代码的灵活性和扩展性。 #### 1.1 实现方式 在C#中...

    da06抽象继承封装多态接口.zip

    在编程领域,面向对象编程(OOP)是设计和实现软件的一种重要方法,它强调了类、对象、继承、封装、多态等核心概念。在Flutter框架中,这些概念同样得到了广泛的应用。Flutter是一个用于构建高性能、高保真度的移动...

    OOP_CODE详细代码

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起,以实现代码的模块化和重用性。在OOP_CODE详细代码中,我们可以看到一个针对初学者...

    C++继承与多态例子

    在C++编程语言中,继承和多态是面向对象编程(OOP)的两个核心概念。继承允许我们创建一个新类(子类),它继承了另一个类(父类)的属性和方法,从而实现了代码的重用和扩展。多态则是指同一种行为在不同对象上表现...

    学习笔记:抽象封装、继承、多态.doc

    **抽象类**: 抽象类是一种特殊类型的类,它可以包含抽象方法(只有方法签名没有具体实现的方法)。继承自抽象类的子类需要实现所有的抽象方法。 #### 三、封装 封装是将对象的状态(数据成员)和行为(成员方法)...

    教学视频-继承&多态

    1. 方法重载(Overloading):在同一个类中,可以定义多个具有相同名称但参数列表不同的方法,这是多态的一种表现。编译器根据传入的参数类型和数量来决定调用哪个方法。 2. 方法覆盖(Overriding):子类覆盖父类...

    android架构-复习基本OOP知识d

    - **重写与重载**:重写(Override)是在子类中改变父类的方法实现,而重载(Overload)是在同一类中创建多个同名但参数不同的方法。 - **接口**:接口是完全抽象的类,用于定义行为规范,实现多继承。Android的回调...

    java入门基础-继承及多态

    - **接口实现**也支持多态,即通过接口引用调用实现类的方法。 #### 四、总结 通过继承,可以实现代码复用,提高开发效率。方法重写和重载是实现多态性的两种主要方式。理解继承、抽象类和接口的概念对于掌握面向...

    java——基础商城小项目 包含面向对象 多态 接口

    Java支持两种形式的多态性:编译时多态(通过方法重载实现)和运行时多态(通过方法重写实现)。运行时多态是通过接口和继承来实现的,它是Java中最强大的特性之一,可以提高代码的灵活性和可扩展性。 接口...

    221102多态.rar

    - 接口与多态:在Java等语言中,接口提供了另一种实现多态的方式,它定义了一组方法签名,类实现接口后必须提供这些方法的实现。 - C#的接口与抽象类:C#同时支持接口和抽象类,它们各自在多态场景中有不同的适用...

    java OOP教程

    Java面向对象编程(Object-Oriented Programming,简称OOP)是一种强大的编程范式,它将复杂的程序设计问题转化为一系列可重用的对象。本教程旨在帮助新手和经验丰富的程序员深入理解和应用Java OOP概念。 首先,...

    S2-------JavaOOP全程解答

    Java面向对象编程(Object-Oriented Programming,简称OOP)是一种强大的编程范式,它将复杂的程序设计问题通过模拟现实世界中的对象来解决。在Java中,OOP主要包含四个核心概念:封装、继承、多态和抽象。下面将...

    Java OOP编程思想学习之我见

    多态是OOP的另一个关键特性,它允许我们使用父类类型的引用指向子类的对象,这样就可以根据实际对象类型动态调用合适的方法,即“一种接口,多种实现”。在Java中,多态可以通过方法重载(overloading)和方法覆盖...

    PHP面向对象编程之深入理解方法重载与方法覆盖(多态)

    在面向对象编程(OOP)中,多态性是一种非常重要的概念。多态的字面意思是“多种形态”,在编程中指的是使用父类型引用指向其子类型的实例,从而允许通过父类指针调用在不同子类中实现的方法。多态是面向对象编程的...

    Python中的面向对象的三大特征_封装、继承、多态.pdf

    Python 是一门面向对象编程语言,面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将现实世界中的实体抽象化为类和对象,类是抽象的模板,对象是类的实例。面向对象编程有三大特征:封装、继承...

    0509-多态巩固.zip

    多态(Polymorphism)在计算机科学中,尤其是在面向对象编程中,指的是同一种接口可以有不同的实现方式,或者同一个消息可以被不同的对象以不同的方式响应。这使得代码更加灵活,可扩展性更强。 在Java、C#、Python...

    面向对象oop详解

    面向对象编程(OOP)是计算机编程中一种极为重要的范式,它的核心思想是将数据(属性)和行为(方法)封装成一个单独的实体——类。通过类的实例化,我们能够创建对象,并利用对象之间相互作用来解决实际问题。OOP的...

Global site tag (gtag.js) - Google Analytics