`
liuwei1981
  • 浏览: 753895 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:156533
社区版块
存档分类
最新评论

76.Java中的虚方法调用

 
阅读更多

我们前面已经知道了,在多态的情况下,声明为父类类型的引用变量只能访问父类中定义过的方法,但如果此变量实际引用的是子类的对象,而子类中又进行了方法覆盖时,实际调用的是子类中覆盖后的方法,这种机制称为虚方法调用


在使用多态的情况下,有可能出现编译时类型和运行时的类型不一致的问题,如上面的例子中:
public class CalClass{
 .. …
 public int calPersonBirthYear(Person p) {
  // 根据参数p的年龄来计算出生年代
 }
}


在编译的时候,方法calPersonBirthYear 的参数类型是Person的,而在运行的时候,可能就是Student 或Teacher或Person或其他的Person子类类型了。

分享到:
评论

相关推荐

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    静态方法在Java中是一种非虚方法

     静态的方法是非虚方法(Java中的非虚方法有private,final,static,构造器,非虚方法无需根据具体的对象遍历方法区的方法表,决定调用关系)  也是说,对于静态类型方法的调用,是其声明类型的,如Parent c = ...

    java基础题 很全面

    54. java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 13 55. java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 14 56....

    Java支持库2.0#0版(静态版)

    如果需要特别指定“用户类路径”或“本地库路径”,则必需在使用“Java本地接口”之前显式调用“Java虚拟机.创建()”方法创建Java虚拟机,以传入相关路径参数。本支持库要求目标机器中已安装“Java运行时环境”(JRE...

    计算机Java、网络面试资料

    垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分...

    JVM调用Lambda的表达式实现方法原理详解.docx

    invokevirtual:用于调用所有的虚方法。 invokeinterface:用于调用接口方法,会在运行时再确定一个实现该接口的对象。 invokedynamic:先在运行时动态解析出调用点限定符所引用的方法,然后再执行该方法。

    java 面试题 总结

    它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是...

    16.方法调用1

    1.invokestatic:调静态法 3.invokevirtual:调所有的虚法 4.invokeinterface:调接法、会在运时再确定个实现此接的对象

    Java支持库2.0#0版

    如果需要特别指定“用户类路径”或“本地库路径”,则必需在使用“Java本地接口”之前显式调用“Java虚拟机.创建()”方法创建Java虚拟机,以传入相关路径参数。本支持库要求目标机器中已安装“Java运行时环境”(JRE...

    java面试宝典

    76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private String name; public abstract boolean isStupidName...

    疯狂JAVA讲义

    学生提问:为什么我创建Java对象时从未感觉到java.lang.Object的构造器被调用过? 150 5.7 多态 151 5.7.1 多态性 151 5.7.2 引用变量的强制类型转换 152 5.7.3 instanceof运算符 154 5.8 继承与组合 154 ...

    JAVA面试题集合面试技能大全

    1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     5.1.3 在持久化类的访问方法中加入程序逻辑  5.1.4 设置派生属性  5.1.5 控制insert和update语句  5.2 处理SQL引用标识符  5.3 创建命名策略  5.4 设置数据库Schema  5.5 设置类的包名  5.6 运行本章的范例...

    仿知乎java源码-Java2Cpp-Translator:Java到C++转换器

    的受限版本,没有虚方法、继承、模板、lambda 抽象、auto、decltype 等。 翻译器主要对基本翻译建模和支持 OOP 的关键特性(如动态调度和方法重载)感兴趣。 它没有利用 C++ 的继承来模拟编译器对继承的实现。 特征 ...

    Java 虚拟机面试题全面解析(干货)

    Java虛拟机调用字节码指令有哪些? 虚拟机是如何执行方法里面的字节码指令的? 解释执行 基于栈的指令集和基于寄存器的指令集 什么是基于栈的指令集? 什么是基于寄存器的指令集? 基于栈的指令集的优缺点? Javac编译...

Global site tag (gtag.js) - Google Analytics