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

76.Java中的虚方法调用

 
阅读更多

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


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


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

分享到:
评论

相关推荐

    283.281.JAVA基础教程_面向对象(中)-虚拟方法调用的再理解(283).rar

    这就是所谓的虚方法调用。 4. **final、static和private方法**:虽然大多数非静态方法是虚拟的,但final、static和private方法不是。final方法不能被重写,因此它们的调用是在编译时固定的。static方法属于类而不是...

    java中的继承(子类调用父类构造方法还不懂).doc

    上溯造型(也叫虚方法)中,方法是调用子类自己的,属性是调用父类的。 在 Java 中,可以使用 `instanceof` 操作符来判断一个变量是否是右操作数指出的类的一个对象。由于 Java 语言的多态性使得可以用一个子类的...

    c#虚方法学习

    在C#编程语言中,虚方法是面向对象编程的一个核心概念,它允许子类重写父类的行为。本文将深入探讨虚方法的概念、用途以及如何在C#中使用它们,特别针对面向对象编程的初学者。 一、虚方法介绍 虚方法是C#中的一种...

    16.方法调用1

    3. **invokevirtual** - 虚方法调用,调用所有的非私有非静态方法。如果目标方法被重写,那么在运行时会根据对象的实际类型来决定调用哪个版本的方法,这是Java多态性的基础。 4. **invokeinterface** - 用于调用...

    java核心知识点整理.pdf

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

    Thinking.In.Java.Third.Edition.CHS.zip

    在Java编程中,首要的知识点是基础语法,包括变量、数据类型、运算符、流程控制(如if语句、for循环、while循环)以及方法的定义与调用。《Thinking in Java》在这些基础部分提供了丰富的示例,帮助读者理解和掌握...

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

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

    [inside hotspot] java方法调用的StubCode1

    本文将详细介绍 HotSpot 中与 Java 方法调用相关的 StubCode,特别是通过 `JavaCalls` 类中的方法调用来理解其内部机制。 #### JavaCalls 类详解 在 HotSpot 的源代码中,`JavaCalls` 类位于 `hotspot/src/share/...

    JAVA核心知识点整理.pdf

    Java的动态多态性依赖于方法的绑定机制——晚期绑定(Late Binding),也叫虚方法调用。 JVM(Java虚拟机)是Java程序运行的基础,它负责解析并执行字节码,提供了线程支持、内存管理等服务。JVM内存区域可以分为...

    scrcpy投屏 AssertionError: java.lang.reflect.InvocationTargetExcep

    `AssertionError`是Java中用于断言失败的异常,而`InvocationTargetException`则是在调用方法时抛出的异常,通常与方法内部的异常处理有关。 解决这个问题的方法可能有以下几点: 1. **检查版本兼容性**:确保你的...

    从虚拟机指令执行的角度分析JAVA中多态的实现原理.docx

    这依赖于Java的虚方法调用机制,即如果一个方法在子类中被覆盖(Override),那么子类对象会执行子类版本的方法,而不是父类的原始版本。 5. **JVM的分派过程**: 在JVM执行字节码时,会经历静态分派和动态分派两...

    6.java引用类型.zip

    在这个例子中,尽管`animal`是`Animal`类型,但由于它引用的是`Dog`实例,因此可以调用`Dog`类中重写过的`eat`方法。 五、null引用 在Java中,`null`引用表示没有指向任何对象的引用。当你声明一个引用但未初始化时...

    java使用jawin调用dll文件

    本篇文章将详细探讨如何在Java中使用JAWIN库来调用DLL文件,以及这个过程中的关键知识点。 JAWIN 是一个开源项目,它为Java提供了一种简单的方式来访问Windows API和DLL函数。它通过JNI(Java Native Interface)...

    深入Java核心Java中多态的实现机制.pdf

    这意味着,只有在运行时,Java虚拟机才能确定调用哪个具体的方法实现,即晚绑定或虚方法调用。 4. **接口实现**:除了继承,Java中的接口也是实现多态的一种方式。通过实现一个或多个接口,类可以具有接口定义的...

    java bytecode

    - 方法调用:虚方法调用与非虚方法调用的区别。 - 操作数栈:用于存储计算过程中的临时数据。 - 局部变量表:每个方法都有一个局部变量表,用于存储方法参数和局部变量。 总之,理解和分析Java字节码是提升Java开发...

    Java面试知识.pdf

    Java中的接口和C++中的虚类都是为了实现多继承的机制。Java中不支持多继承,而接口可以提供更多的灵活性。接口中没有任何实现代码,所有方法默认都是public的,属性默认都是public static的。一个类可以实现多个接口...

    从虚拟机角度看Java多态->(重写override)的实现原理

    在字节码层面,Java的虚方法调用使用`invokevirtual`指令。当JVM遇到这个指令,它会查看当前对象的实际类型,然后在该类型的Method Area中找到对应的方法表,从中获取方法的直接引用并执行。如果父类和子类都有相同...

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

    Java虚拟机(JVM)在执行Java代码时,会根据不同的方法调用场景使用不同的字节码指令。这里主要讨论的是`invokestatic`、`invokespecial`、`invokevirtual`、`invokeinterface`和`invokedynamic`这五种指令。 1. `...

    C++和Java多态的区别

    Java中的多态也是通过虚方法调用来实现的,但是其实现机制与C++有所不同。Java的多态性主要依赖于方法表(method table),并通过JVM来管理。 **方法表(method table)**: - 每个类都有一个方法表,用于存储该类...

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

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

Global site tag (gtag.js) - Google Analytics