我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:彩库宝典 > 动多态 >

【Java Learning】重载、多态和动态绑定——Overloading、Ploymo

归档日期:07-15       文本归类:动多态      文章编辑:爱尚语录

  对于面向对象编程语言,重载、多态和动态绑定是非常重要的概念,并且其中细节容易误解,在此,我写下这篇文章既为总结,亦为学习。

  在Java中,方法的名称和形参列表称为方法的签名,只要签名相同便视为同一方法,因此,在同一个类中不允许出现签名相同的方法,如:public int getSalary()与public double getSalary()在同一个类中定义便会报错,因为按照Java的语法规则,这两个方法的签名是相同的,则视为重复定义!!

  所谓重载,指的是方法的名字相同而形参列表不同(即签名不同),如:public void setSalary(double s)与public void setSalary(int s)就是两个不同的方法,当对象调用名为setSalary的方法时,编译器会查看调用这个方法时提供的参数类型,如果在所有名为setSalary的方法中存在于提供参数类型完全匹配的方法,则编译器自动选择这个方法。如下例子,编译会根据调用add方法时提供的参数类型自动寻找完全匹配的方法。

  多态的定义:一个对象变量可以指示多种实际类型的现象。在Java中,对象变量是多态的,一个类Temp的对象变量既能引用Temp类的对象,也能引用Temp类的任意子类的对象。虽然如此,但是超类对象变量引用其子类对象的时候需要注意几个问题:(我们以Employee类和Manager类为例,其中Employee为Manager的超类,如下程序,p为超类对象变量,boss为子类对象变量,p=boss,使得p引用了其子类对象)

  1、引用子类对象的超类对象变量不能调用子类中新定义的方法(即超类中不存在同样签名的方法);

  2、引用子类对象的超类对象变量可以调用子类未定义而定义于超类中的方法(显然,因为这是继承而来的);

  3、若子类中定义了与超类中签名相同的方法,子类中的该方法将覆盖超类中的方法,即:引用子类对象的超类对象变量调用子类和超类中均有定义且签名相同的方法时,将调用子类中的该方法。

  在Java中的定义:在运行时能够自动选择调用哪个方法的现象称为动态绑定。一个对象调用一个方法时,编译器会首先查看对象声明的类型和所调用的方法的名,需要注意的是,在该对象所属的类及其超类中可能存在多个方法具有相同的名字,编译器会列举所有可调用的方法作为候选;然后根据调用方法所提供的参数类型进一步从这些候选方法中寻找完全匹配的方法,这一步也就是重载;到此,完全匹配的方法并不一定是唯一的,因为该对象所属的类及其超类中可能定义了相同签名的方法,这时候就有一个“覆盖”的问题,即:子类中的这个签名的方法将会覆盖掉其超类中相同签名的方法;最后,该对象才能确定调用的是哪个方法。这个过程称为动态绑定,说得直白点,对象调用某个方法时,编译器是不能直接确定的,而是一个动态判定的过程。

  补充:与动态绑定相对应,还有一种静态绑定(Static Binding),也就是编译器可以准确的知道调用的方法,这类方法包括private、final、static以及构造器。

  重写(Override):(1)父类与子类之间的多态性,对父类中的方法进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写了(Overriding)。在Java中,子类可...博文来自:xiaoyanol的博客

  重载,英文名是overload,是指在一个类中定义了一个以上具有相同名称的方法,这些方法的参数个数、参数类型和顺序不能相同。返回类型可以相同,也可以不同。publicclassTstaticOverl...博文来自:big_snail的专栏

  子类只能覆盖超类中“可以直接访问”的方法,否则即使在子类中定义了一个与超类中形式一样的方法,也没有覆盖,只是一个同名方法而已。此时,子类中拥有两个名字相同的方法:其中一个是从超类中继承的不可访问方法,...博文来自:bryantd的专栏

  在浏览C++论坛时,我总是能发现很多C++初学者的提问帖子,都是关于动态绑定的。基本大意就是不完全理解动态绑定该如何理解,造成一些面试或者实际编程上的困扰。本文就是针对这个问题作出的解答。作者并...博文来自:Sheen Space

  以下面代码为例,存在超类Employee和子类Manager,两个类中都有getSalary方法,但实现不同。一个对象变量可以引用多种实际类型的现象被称为多态(polymorphism),运行时能够自...博文来自:lichengyu的专栏

  何为多态?何为动态绑定?一个对象变量(例如,变量e)可以指示多种实际类型的现象被称为多态(polymorphism)。在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamicbinding...博文来自:Tastill的博客

  多态及动态绑定 动态绑定:动态绑定(后期绑定)是指:在程序运行过程中,根据具体的实例对象才能具体确定是哪个方法。java实现了动态绑定,必须提供一些机制,可在运行期间判断对象的...博文来自:weixin_38668269的博客

  参考资料:多态具体表现形式有两种:方法的重写和方法的重载。先来看一段程序(此段代码摘自...博文来自:zlp1992的专栏

  在java中,重载就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法,这也牵涉到了多态。在PHP中呢,有人说php没有多态,那重载...博文来自:lightWay的博客

  方法覆盖:方法覆盖就是子类继承自父类,对父类的方法进行方法体的修改。方法覆盖必须有相同的方法名称,参数值,返回值。方法重载:就是一个类或多个类中,方法的名称不相同,但参数列表相同,返回值不受限定(可相...博文来自:菜鸟升职记的专栏

  重载和重写只是java语法的一种规则,在《thinkinginjava》一书中也没有具体定义,记住规则即可。最简单的区别如下图:具体的区别:  重载体现了java编译时的多态性,覆写体现为运行时的多态...博文来自:WhisperSilence的博客

  一:静态绑定与动态绑定静态绑定:编译时绑定,通过对象调用动态绑定:运行时绑定,通过地址实现多态–简单是意思是多种状态静态多态:a:函数多态(重载)b:模板多态(类模板和函数模板)动态多态:a:虚函数机...博文来自:f2016913的博客

  用指针和引用才会调用virtual,当用“.”时是引用不了的类里面有一个virtual函数,那么它的析构函数必须是virtual的,不然的话就会有麻烦静态绑定比动态绑定快很多C++:默认是静态的,追求...博文来自:Hello_leiyuanyi的博客

  多态何为多态?嗯就是多种状态,如果前面要加上代词的话,我想应该是对象。java多态可以分为三种,即重写多态、重载多态、泛型多态(通常意义上的多态指的是重写多态)。重写多态:子类可以将父类的任意虚方法根...博文来自:nvnnv的博客

  重载:有两个或多个函数名相同的函数,但是函数的形参列表不同。在调用相同函数名的函数时,根据形参列表确定到底该调用哪一个函数。多态:在基类中定义了一个虚拟函数,然后在派生类中又定义一个同名,同参数表的函...博文来自:erinapple的博客

  最近看了一些书上讲的多态,发现相互之间是有冲突的,最主要的冲突是对重载是不是多态的观点,看过这些书以后,我有了自己的看法,特此写出来给大家分享:  一、首先我们看一下多态的定义:多态是指程序中定义的引...博文来自:于超的博客

  本质上多态分两种:1、编译时多态(又称静态多态)2、运行时多态(又称动态多态)...博文来自:jason_cuijiahui的博客

  所谓动态绑定,其实就是接口的实现由派生类完全覆盖。就是说原本声明的类型是基类B,但是调用函数的时候执行的却是不同派生类(由初始化或者赋值的时候定义)D的函数。动态绑定出现的条件有两个只有虚函数才能进行...博文来自:空之境界

  1)多态:父类型的变量,可以引用子类型的对象classA{}classBextendsA{}那么可以Aa=newB();其中这里的A叫做声明类型,B叫做实际类型那么这里的a就可以调用B中的方法(如果有...博文来自:子衿_青青的博客

  一、多态    面向对象语言的三大特性之一的多态本质上是依赖于重写机制。由于final能够防止覆盖,所以可以有效地关闭动态绑定,生产更有效的代码。二、重载与重写的区别1、重载是一个编译期概念、重写是一...博文来自:乐点的博客

  数据抽象,继承,多态是java的三大特征,可见理解多态对于学习java的重要性,多态不但能够改善代码的组织结构和可读性,还能够让程序更加的具有可拓展性。    理解一下什么是多态。多态就是同一事物的多...博文来自:南朝烟雨的博客

  有两种多态:编译时期多态(又叫静态多态):编译时期的多态是靠重载实现的,根据参数个数,类型和顺序决定的(必须在同一个类中)运行时的多态(又叫动态多态):在运行时根据实际情况决定调用函数~~~~~~~~...博文来自:HD243608836的博客

  以前在大学学习OOP的时候,知道了重载和重写的区别,但如果要把他们和多态联系起来,我想很多新手朋友和我当初一样是死记的,可是时间长了,自然而然就忘记了,最近在写测试的时候,终于“开窍”了。在这里和大家...博文来自:明天的你会感谢今天的自己

  面向对象的三种基本特征:数据抽象(封装)、继承、多态重载:定义:在同一个类中,具有相同的方法名,但每个重载的方法具有一个独一无二的参数类型列表(可以是不同的类型,可以是不同的参数个数,也可以是相同的类...博文来自:Blank_Space

  重载在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,Java就会将它们看做唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。重载的规...博文来自:Hel1o_world的博客

  重写       定义:重写是子类对父类的允许访问的方法的实过程进行重现新编写,返回值和形参都不能改变。即外壳不变,核心重写!      重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说...博文来自:kingdomjc

  解释java多态、动态绑定、静态绑定、向上转型、传值引用和传值引用的相关特性。...博文来自:Richard_Cai

  前言在Java中,作为三大特性之一的多态十分重要,特别是其表现形式:方法重载(Overload)、方法重写(Override)本文全面amp;详细解析Java的多态特性,希望你们会喜欢目录1...博文来自:专注分享 Android开发 干货

  C++具有多态的特性,理解多态原理需要理解以下四个概念。       1、对象的静态类型(statictype):就是它在程序中被声明时所采用的类型(或理解为类型指针或引用的字面类型),在编译期确定;...博文来自:u010757019的博客

  1.什么是方法的重载?      重载的存在是为了解决调用方法时,出现方法名不同,但参数列表不同的情况,比如类的构造方法就常用到方法的重载,调用构造方法创建对象时,传入不同的参数就可以方便的对属性赋值...博文来自:sunming0129的博客

  对今天解决不了的事情,不要着急。因为明天也可能还是解决不了.哈哈,这句话送给正在被这些东西困扰的你,我也是折腾了好久,才弄清楚这些都是什么鬼[捂脸]...博文来自:明月沉江春雾晓

  此文章为我阅读《java核心技术I》的读书笔记。穿插个人理解和书上所述。以及引用了网上的文章。侵权删。1.多态首先,什么是多态?根据定义上来讲,一个对象变量可以指示多种实际类型的现象被称为多态。或者可...博文来自:k7c9。

  python不像java,c++等面向对象一样存在着多态和重载的问题,在python中用缺省参数很好的实现了多态和重载,在python中只存在着重写一.多态的实现classStudent(object...博文来自:lxslx的博客

  1,同一操作作用于不同的对象,同一接口可产生不同的结果2,有两种多态:一种是编译时期多态又叫静态多态,编译时期的多态是靠重载实现的,根据参数个数,类型和顺序决定的(必须在同一个类中)另一种是运行时的多...博文来自:weixin_42720316的博客

  [size=medium][b]一、方法重写(Override)[/b][/size]子类可以重写父类的方法。方法的返回值类型、参数类型、参数个数都不能改变,只能重写方法体。[b]方法的重写规则[/b...博文来自:iteye_3352的博客

  继承在java中继承的关键字是:extends继承可以获得父类的属性和方法而且子类还可以具有自己的特殊的功能。**例:这是一个圆publicclassCircle{privatedoubleradiu...博文来自:笨qiao先飞

  一.多态的基本概念多态性是面向对象的三大特性(封装、继承、多态)之一,多态可以理解为事物存在的多种体现形态,比如动物类(Animal)中有猫类(Cat)、狗类(Dog),一只小猫可以称之为猫,也可以称...博文来自:Jacky_Cmd

  在使用pip安装某个包时,python install xxx,会报拒绝访问的错误,解决方式是修改python安装目录的权限博文来自:AI百科的博客

  用以前以前写过的自定义课表软件 ,Android 自定义View课程表表格 n原生View截图合成分享的图片 n n n n n n n n n 看到的是图片只显示到11节处,下面的没有...博文来自:ShallCheek

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...博文来自:我走小路的博客

  :[reply][/reply] 我也遇见了类似错误,请问有什么解决方案吗

本文链接:http://dalezaragoza.com/dongduotai/688.html