例如:
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 编译时多态和运行时多态是 Java 语言中两个重要的概念,它们都是多态性的实现方式,但它们在实现机制和应用场景上有所不同。 编译时多态 编译时多态是指在编译期根据参数列表的...
这就是编译多态的体现,编译器在编译时就能确定调用哪个版本的函数,无需运行时动态绑定。 通过这个实例,我们可以看到操作符重载在实现编译多态性中的作用,它可以提高代码的可读性和灵活性。在实际编程中,我们...
在泛型编程中,多态基于template(模板)的具现化与函数的重载解析,这种多态在编译期进行,因此称为编译期多态或静态多态。在本文中,我们将了解: 什么是运行期多态 什么是编译期多态 它们的优缺点在哪 ...
接着,我们来看多态的两种主要形式:编译时多态和运行时多态。编译时多态通常通过函数重载和运算符重载实现,编译器在编译阶段就能确定调用哪个函数。而运行时多态则是在程序运行时才决定调用哪个函数,这是通过虚...
多态性分为编译时多态和运行时多态。编译时多态主要通过方法重载(Overloading)实现,运行时多态则依赖于方法重写(Overriding)和向上转型(Upcasting)。 1. **方法重载**:在同一类中,允许存在多个同名方法,...
多态通常分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过函数重载和运算符重载实现,而运行时多态则是通过虚函数实现的。本实验将重点探讨如何利用虚函数实现运行时多态。 #### 实验目的 ...
这主要体现在方法的多态和类型的多态上。例如,运算符 "+" 在不同的上下文中有不同的解释,如正数运算、加法运算和字符串连接,这就是多态的一个例子。在Java中,子类可以被视为其父类的一种类型,即子类对象可以...
下面将详细介绍如何在LabVIEW中创建和使用多态VI。 1. **定义多态VI的基本结构** 在LabVIEW中,一个多态VI通常包含一个或多个输入端子,这些端子的数据类型决定了VI的行为。例如,你可以创建一个VI,它的输入是一...
多态有两种类型:静态多态(编译时多态)和动态多态(运行时多态)。静态多态主要通过函数重载和运算符重载实现,而动态多态则依赖于虚函数和抽象类。 虚函数是C++中实现动态多态的关键。在基类中声明虚函数,可以...
在Java中,多态分为编译时多态和运行时多态。编译时多态主要体现在方法的重载(Overloading),即在同一个类中可以有多个同名方法,但参数列表不同。编译器会根据传入参数的类型和数量来决定调用哪个方法。运行时...
多态分为编译时多态和运行时多态。编译时多态主要通过方法的重载(Overloading)实现,即在同一个类中定义多个同名但参数列表不同的方法。而运行时多态则是通过方法的重写(Overriding)和接口实现实现,它依赖于...
本文将通过两个具体的代码实例,帮助你深入理解和掌握多态和虚函数的用法。 首先,我们需要理解多态的基本定义。多态是指一个接口可以有多种不同的表现形式或行为。在面向对象编程中,多态分为静态多态(编译时多态...
多态有两种主要形式:静态多态(编译时多态)和动态多态(运行时多态)。静态多态主要通过方法重载(Overloading)实现,即在同一个类中创建多个同名但参数列表不同的方法。动态多态则通过方法重写(Overriding)...
多态有两种形式:编译时多态和运行时多态。编译时多态是指在编译时确定对象的类型,而运行时多态是指在运行时确定对象的类型。 5.4 多态的应用 多态的应用包括: * 方法重写 * 方法重载 * 运算符重载 5.5 构造...
多态分为编译时多态和运行时多态。编译时多态主要通过方法重载实现,而运行时多态则依赖于方法重写和接口实现。 1. **方法重载(Overloading)**:在同一类中,方法名相同但参数列表不同的方法称为重载方法。Java...
在某些性能敏感的场景下,如何平衡多态和性能是开发者需要考虑的问题。 3. C++模板元编程中的多态:这是一种在编译时进行计算的技术,通过模板可以实现类似于泛型编程的静态多态,提供非常高效且类型安全的代码。 ...
编写C++程序需要经过编辑、编译、连接和运行四个步骤。编辑是将C++源程序输入计算机的过程,保存文件名为cpp。编译是使用系统提供的编译器将源程序cpp生成机器语言的过程,目标文件为obj,由于没有得到系统分配的...
多态分为静态多态(编译时多态)和动态多态(运行时多态)。静态多态主要通过函数重载(Overloading)和运算符重载实现,而动态多态则依赖于方法重写(Overriding)。 例如,假设我们有一个`Animal`类有一个`...
多态有两种形式:编译时多态和运行时多态。编译时多态也称为静态多态,通过方法重载或操作符重载实现。运行时多态也称为动态多态,通过方法覆盖实现。 在 Java 中,构造方法与多态有关。构造方法是类的特殊方法,...
2. **扩展性**:C++的多态实现缺乏Smalltalk等语言提供的自描述性和运行时动态插入新方法的能力,限制了程序的灵活性和可扩展性。 针对这些局限性,C++程序员可以通过以下策略来优化多态的使用: - **精细设计**:...