我要投搞

标签云

收藏小站

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

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

Java中的多态和动态绑定

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

  多态和动态绑定大多与继承有关,因为有了继承的出现,才有了父类与子类,然后就是随之而来的方法,即子类重写父类的方法。另一个出现的就是子类对象的引用转换为父类对象的引用(此处不需要进行强制转换)。比如:

  上述代码中的父类变量father1引用的是子类的对象。也就是说,father1余son1引用的都是同一个对象,这个对象就是Son类的对象。但对于变量father1来说,编译器会把其当做Father类的变量,但是JVM当中,把确认其真实的实例类型(Son类)。

  此处是把父类创建的一个对象(father3)的引用赋给子类变量(son3),在继承当中,这是不被允许的。试想:若此赋值语句成功,那么son3引用的对象其实是father3,但是son3其本身又被声明为Son类,此时在Son类中若有一个额外的新方法(eg: MethodOfSon(){…}),那么son3就可以调用该方法,但是其引用的对象是没有这个方法的,会造成混乱,所以此赋值方式不合适。

  在类的继承之外,还有同一个类内部的方法重载(overloading),同一个方法名,因参数类型和参数个数不同,构成不同的签名。另外,签名不包含返回类型。

  还一个需要注意的地方:编译器会认为staff[0]是一个Employee对象,所以对于以下的调用方式,程序会出错:

  这种方式,看似这样很合理,因为staff[0]引用的是Manager对象,让manager1变量也应用这个对象,这样赋值好像也没什么不对,但是同样编译器报错。因为编译器认为staff[0]是属于Employee类型的,而Manager类是Employee类的子类,两者是不同的类型,不能直接赋值,必须要强制类型转换。

  虽然编译器是通过的,但是在程序运行时,也会报错“ClassCastException”。原因在于staff[1]引用的对象是Employee类型的,也就是说,该Employee对象也能调用子类Manager当中的新方法setBonus(x),这是错误的。所以,Java当中,把父类对象强制转换为子类对象是不被允许的,反过来可以。

  其实,上面的一段话,是从底层的角度对多个对象的逻辑关系进行的分析,实际上,Java虚拟机已经帮我们做了安全检查。只需要使用instanceof运算符,就可以确保赋值安全。

  在上面的例子中,staff[0]就是一个多态的例子,有继承,就有多态。和多态分不开的一个就是动态绑定。动态绑定和是静态绑定相对应的,一个是在编译的时候就知道用什么方法,还一个就是在运行时刻才知道调用哪个方法。

  有private,static,final修饰的方法,或者构造函数,都是静态绑定。

  方法表:除了private、static、final修饰的方法外,其他的能够参与动态绑定的实例方法。

  对于动态绑定来说,每次在类中找对应的方法总是低效的,时间开销大,所以需要为每个类生成一个方法表,这样可以直接在类的方法表中寻找。

  首先编译器确定对象的声明类型和方法名。然后找当前类中方法名字匹配的所有方法(由于重载,可能存在多个),然后在其父类中也找类似的属性为public的方法;

  编译器查看调用方法的参数类型,先在本类中找,然后在超类中找,这一过程称为

  若为private、static或者final修饰的方法,为静态绑定,可直接知道调用的是哪个方法,此情况下就省去了剩下的步骤;

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

  转载请注明原文地址:一:绑定       把一个方法与其所在的类/对象关联起来叫做方法的绑定。绑定分为静态...博文来自:sweet_sauce的博客

  参考:概述我们都知道面向对象有四个基本特性:抽象、封装、继承、多态。这四个特性,概括起来可以这么理...博文来自:的博客

  动态绑定是指在执行期间(而非编译期间),判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。也就是多态。多态的三个条件:要有继承要有重写父类应用指向子类对象...博文来自:qingjuanlucky的专栏

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

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

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

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

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

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

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

  有关java多态学习的收获is-a原则动态绑定is-a原则amp;quot;is-aamp;quot;原则,它表明子类的每一个对象也是超类的一个对象。例如没一个经理都是雇员,因此将...博文来自:的博客

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

  数据抽象,继承,多态是java的三大特征,可见理解多态对于学习java的重要性,多态不但能够改善代码的组织结构和可读性,还能够让程序更加的具有可拓展性。那什么是绑定呢?绑定就是说:一个方法的调用与方法...博文来自:的博客

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

  前几章参考:1-引言2-Objective-C编程3-类、对象和方法4-数据类型和表达式5-循环结构6-选择结构7-类8-继承多态这个其它语言也有。动态类型有类似的,但不完全相同。动态绑定别的语言也有...博文来自:forlong401的专栏--有问题上:

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

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

  (⊙o⊙)…,最近才看到这一块,发现java面对对象编程是从方方面面去体现的。由于java所拥有的这个多态(也叫动态绑定/迟绑定)机制,使得java不再像c这种面向过程的语言一样,java拥有了较高的...博文来自:尽力而为

  多态:运行时引用指向子元素的实例对象【jvm内存模型很重要,也是入门的基础】接着上面继续理解,创建一个老师类 packagecom.physical;publicclassTeacherextends...博文来自:小白博客

  在Java中,如果一个类B继承了类A,则A为父类,B为子类。在运行的时候,系统能够根据具体的子类对象,将父类中用于指向某个方法的指针自动指向到该子类的“覆盖方法”上,从而调用这个“覆盖方法”运行。该现...博文来自:Ghost In Matrix

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

  关于Java的多态在慕课网上的教程中已经学到了,但是当时似乎没有看到有动态绑定这么个主题。虽说,动态绑定的相关功能再教程中确实是提到了。      而Java中的多态一般是跟动态绑定放到一块儿说的,我...博文来自:小灰笔记

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

  绑定:绑定就是将函数调用与地址关联起来。普通的成员变量、成员函数、编译完的时候,调用地址就确定好的。 virtual函数的地址是不确定的,只是能确定虚表的地址,virtual函数有可能被重写。 只有v...博文来自:過往

  关于C++内部如何实现多态,对程序员来说即使不知道也没关系,但是如果你想加深对多态的理解,写出优秀的代码,那么这一节就具有重要的意义。我们知道,函数调用实际上是执行函数体中的代码。函数体是内存中的一个...博文来自:zhanghow的博客

  定义三个类,父类GeometricObject代表几何形状,子类Circle代表圆形,MyRectangle代表矩形。定义一个测试类Test,编写equalsArea方法测试两个对象的面积是否相等(注...博文来自:的博客

  大一学C++的时候就感觉多态这部分略烦,小坑不断。一年过后学习Java再次遇到多态的问题,写一篇笔记来记下发现的各种小坑,以供以后复习。来看下面一段代码:enumNote{MIDDLE_C,C_SHA...博文来自:Novemser的博客

  1-1因为静态成员函数不能是虚函数,所以它们不能实现多态。(5分)正确答案:正确解析:静态成员函数不能是虚函数。静态成员函数对于每一个类只有一份代码,所有的对象共享这份代码,它不归某个对象所有,所以没...博文来自:好学者的博客

  多态(polymorphism)多态的概念多态是指一个程序中相同的名字表示不同的含义的情况。多态有两种情形:编译时多态:重载(overload)多个同名的不同方法如:p.sayHello();p.sa...博文来自:七印miss的博客

  多态总结:指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的...博文来自:的博客

  1.什么是多态?程序中的多态:不同的对象以自己的方式响应相同名称方法的能力称为多态 2.多态的条件 多态的条件:有继承关系、有方法重写、父类的声明变量指向子类对象。 3.多态的优点多态的主要好处就是简...博文来自:ld81516741的博客

  动态绑定和多态对于程序的可扩展性起着很大的作用多态是指一个程序中功能方法名字相同但实现结果不同的情况。一种多态是通过子类对超类或父类方法的重写实现另一种多态是通过在一类中定义同名方法参数不同的重载实现...博文来自:【chase

  新建一个对象时,有声明类型和实际类型之分,如Personp=newMale(); Person为声明类型,Male为实际类型,如果使用p去调用方法已经被重写,那么p调用该方法时,调用的是Male里的被...博文来自:崔小车的博客

  动态绑定是指在执行期间判断所引用对象的实际类型,恩局其实际的类型调用相应的方法动态绑定的三个条件:1.要有继承2.要有方法重写3.要有父类引用指向子类对象classAnimal{ privateStr...博文来自:Eric_keke的专栏

  多态:一个对象变量可以引用多个实际对象动态绑定:程序运行自动选择调用那个对象的方法虚拟机一定调用引用对象的”实际类“的最适合的方法。虚拟机预先为每一个类创建一个方法表,在运行时,虚拟机会查这个表。首先...博文来自:Easygoing

  上两篇篇博文讨论了java的重载(overload)与重写(override)、静态分派与动态分派,这篇博文讨论下动态分派的实现方法,即多态override的实现原理。java方法调用之重载、重写的调...博文来自:程序员

  在使用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容器:类似一个轻量...博文来自:我走小路的博客

  xiaomizhou66a:像请教一下,如果使用了fixed,高度与宽度都塌了呢?

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