`
dickyzhu
  • 浏览: 107450 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

编译多态和运行多态

阅读更多

例如:
1) class Person {

2) public void printValue(int i, int j) {/*…*/ }

3) public void printValue(int i){/*...*/ }

4) }

5) public class Teacher extends Person {

6) public void printValue() {/*...*/ }

7) public void printValue(int i) {/*...*/}

8) public static void main(String args[]){

9) Person t = new Teacher();

10) t.printValue(10);

11) }

12) }

变量t是一个Person对象,但是它是用Teacher实例化的,这就涉及到java的编译时多态和运行时多态的问题,就编译时多态来说,t实际上是一个Person类,这涉及到类型的自动转换(将一个子类的实例赋值给一个父类的变量是不用进行强制类型转换,反之则需要进行强制类型转换,而且被赋值的变量实际上应该是一个子类的对象),如果对t调用了子类中新增的方法则造成编译时错误编译将不能通过,而在运行时,运行时系统将根据t实际指向的类型调用对应的方法,对于本例来说,t.print(10)将调用t实际指向的Teacher类的对应方法。在java中,可以用一个子类的实例实例化父类的一个变量,而变量在编译时是一个父类实例,在运行时可能是一个子类实例。


编译多态:在编译时就确定具体的调用。
例如当多个方法因参数类型及数目的区别而重载时,就可以在编译时确定调用的是那个方法。

运行多态:在运行时才确定调用的多态。
例如:假如B是A的子类,A有一个m方法,B中重写了m方法,那末:
A a;
B b = new B();
a = b;
a.m();

动态多态在运行到a.m()时,才根据A与B的关系确定调用A的m方法还是B的调用方法。

分享到:
评论

相关推荐

    java的编译时多态和运行时多态

    java的编译时多态和运行时多态,保证一看就会

    实例003——操作符重载实现编译多态——复数的加法运算.zip

    实例003——操作符重载实现编译多态——复数的加法运算 实例003——操作符重载实现编译多态——复数的加法运算 实例003——操作符重载实现编译多态——复数的加法运算

    C++编译期多态与运行期多态

    在泛型编程中,多态基于template(模板)的具现化与函数的重载解析,这种多态在编译期进行,因此称为编译期多态或静态多态。在本文中,我们将了解:  什么是运行期多态  什么是编译期多态  它们的优缺点在哪  ...

    Java语言中的 覆盖重载和多态

    Java语言中的覆盖重载和多态,方法的多态,类型的多态,多态的优点,覆盖(override)识别标志,方法的重载,构造函数的重载,重载的好处,重载与覆盖的比较,编译时多态和运行时多态

    day10_07面向对象的基本特征三:多态.avi

    面向对象的基本特征三:多态的理解(java) * 多态:多种形态 * * 变量的引用形式: * (1)本态引用:左边的变量与右边的对象是同一种类型 * (2)多态引用:左边的变量是... * 强调:多态和属性无关,只说方法

    java实验报告(2)-多态和继承

    Java,面向对象编程的第二站--多态和继承,包含一个实验报告word文档(内包括体会和程序简介)和一个源代码压缩包(在Myeclipse 6.0下编译通过)

    详解C++ 多态的两种形式(静态、动态)

    C++中的多态性具体体现在编译和运行两个阶段。编译时多态是静态多态,在编译时就可以确定使用的接口。运行时多态是动态多态,具体引用的接口在运行时才能确定。 静态多态和动态多态的区别其实只是在什么时候将函数...

    C#中多态现象和多态的实现方法

    多态性的一个重要特征是方法的调用是在运行时确定而不是编译时。在.NET中用于实现多态性的关键词有virtual、override、abstract、interface。 一、virtual实现多态   shape类是通用的基类,draw是一个虚方法,每个...

    C++面向对象之多态的实现和应用详解

    前言 本文主要给大家介绍的是关于C++面向对象之多态的实现和应用的相关内容,分享出来供大家...多态分两种分别为静态多态和动态多态: 静态多态:静态多态就是重载,因为是在编译期决议确定,所以称为静态多态。 动态

    C++多态模板

    函数的重载:根据函数调用时所给的参数类型和数量不一样,在程序运行前就知道应该调用哪一个函数。 运算符的重载:根据运算对象的不同在编译时就可以确定执行什么样的结果

    多态性.ppt

    C++中的多态(虽然多态不是C++所特有的,但是C++中的多态确实是很特殊的)分为静多态和动多态(也就是静态绑定和动态绑定两种现象),静动的区别主要在于这种绑定发生在编译期还是运行期

    Java-多态与接口综合案例_USB接口设计

    多态用一句话概括就是:事物在运行过程中存在不同的状态。。多态的存在有三个前提: 1.要有继承关系 2.子类要重写父类的方法 3.父类引用指向子类对 综合实际应用,我们做出以下总结: ① 成员变量 编译看左边(父类),...

    深入解析C++中的虚函数与多态

    比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)和一个指向虚函数表的指针...

    Visual C++范例大全书中405个实例的代码

    实例3:使用操作符重载实现编译多态——复数的加法运算 6 实例4:使用函数模板实现不同数据类型的极值函数 7 . . . 17.3 视频处理 695 实例402:创建基于MCI的数字视频处理类——CMyMCIVideo 695 实例403:使用...

    C++之多态(内容不错)

    编译环境:WIN10 VS2017 这篇博客有点长,但都是满满的干货,一定要看到最后,那才是重点。 什么是多态? 顾名思义就是同一个事物在不同场景下的多种形态。   下面会具体的详细的介绍。 静态多态 我们以前说过的...

    C++范例大全

     实例3:使用操作符重载实现编译多态——复数的加法运算  实例4:使用函数模板实现不同数据类型的极值函数  1.2 C++常用的操作与算法  实例5:使用C++实现格式化数据的I/O  实例6:实现数字金额的中文大写...

    员工管理系统是一个基于C++语言开发的控制台应用程序,实现了对员工信息的管理和操作。系统通过多态的设计,支持不同类型的员工

    系统通过多态的设计,支持不同类型的员工,包括普通职工、经理和老板。用户可以进行增加、显示、删除、修改、查找、排序、清空文件等操作,以有效地管理和维护员工信息。.zip 源码是经过本地编译可运行的,下载完成...

    C++面试题,针对资深开发工程师面试题目含详细解答

    C++5年以上资深工程师面试题目以及详细解答。 1 简述C、C++程序编译的...18 编译时多态和运行时多态的区别? 19 智能指针是线程安全的吗?哪些地方需要考虑线程安全? 20 虚函数表是在什么时候确定的?那虚表指针呢?

    DuoTai.java

    最近在复习JAVA相关基础知识,在编译时多态和运行时多态-多态-转型 这一块有一点小问题和思考,这是具体思考以及相关练习的源代码。 因为该处产生的错误为运行时异常,故编译时看不出来报错,干脆整个试验一下,此处...

    深入理解c#多态

     多态:即一个接口,多个功能  同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果  多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在...

Global site tag (gtag.js) - Google Analytics