`
wj196
  • 浏览: 295287 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

多态运行怎么区分引用哪个类型/对象

 
阅读更多
多态的运行:
实例方法:动态绑定,即引用的变量实际引用的类型是哪一个,则运行哪一个实例方法。在运行时由java虚拟机动态决定。
静态方法:静态绑定,即引用的变量所声明的类型是哪一个,则运行哪一个静态方法。在编译阶段就已经做出了决定。
成员变量(包括静态变量和实例变量):静态绑定,即引用变量所声明的类型是哪一个,则运行哪个成员变量。在编译阶段就已经做出了决定。

Base  who = new Sub();
System.out.println("who.var=" + who.var);
who:引用的变量;
Base: 引用变量所声明的类型;
Sub:引用变量实际引用的类型,


package test1;

public class Base {
	String var = "baseVar";
	static String staticvar = "staticBasevar";

	void method() {
		System.out.println("Base method!");
	}

	static void staticMethod() {
		System.out.println("static Base method!");
	}

	public static void main(String[] args) {

		Base who = new Sub();
		System.out.println("who.var=" + who.var);
		System.out.println("who.static =" + who.staticvar);
		who.method();
		who.staticMethod();

	}

}

class Sub extends Base {

	String var = "SubVar";
	static String staticvar = "staticSubvar";

	void method() {
		System.out.println("Sub method!");
	}

	static void staticMethod() {
		System.out.println("static Sub method!");
	}

	String subvar = "sssssssssss";

	void submethod() {
		System.out.println("Sub method!wwwwwwwwwww");
	}

}



运行结果:
who.var=baseVar
who.static =staticBasevar
Sub method!
static Base method!
分享到:
评论

相关推荐

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

    * (2)多态引用:左边的变量是父类类型,右边的对象是子类的对象 * * 多态的表现出来的特征:编译类型与运行时类型不一致 * 编译的时候,按照父类的类型进行编译的 * 执行的方法,按照子类进行运行,是...

    黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc

    多态的体现是指父类的引用指向了自己的子类对象。这意味着,我们可以使用父类的引用来指向子类的对象,从而实现多态。例如,在上面的示例代码中,我们使用了父类`Animal`的引用来指向子类`Cat`、`Dog`和`Pig`的对象...

    深入理解Java多态.pptx.pptx

    多态是面向对象编程中的一个重要特性,它允许一个类的引用变量指向多种实际类型。这意味着在运行时,可以调用不同的方法实现不同的功能 多态的实现方式 多态可以通过继承、接口和重写实现。子类继承父类后,可以使用...

    易语言的继承多态演示源码

    ' 多态:引用同一个类型,使用不同实例而不同操作。' 如下:运行时根据需要生产产品,实现多态。' 封装之接口:抽取方法集合成基类,提供给别人。' 设计模式之工厂模式:包装成工厂模式,隐藏实际创建过程,在需要时只提供...

    JavaSE进阶 面向对象多态

    JavaSE 进阶 面向对象多态 在 JavaSE 中,面向对象多态是指同一个对象可以具有多种形态,例如一个人可以是老师、丈夫、父亲等。这种多态性是通过方法的重写和重载来实现的。 多态的形式有很多,例如: 1. 方法...

    C++多态的使用方法代码,根据实际对象类型来执行适当的操作

    C++中的多态性是面向对象编程的重要概念,它允许使用基类指针或引用来调用派生类的方法。这种灵活性使得程序...这就是多态的体现:通过基类指针或引用调用虚函数时,会根据实际对象的类型来动态地决定要调用的函数。

    C++ 编程思想 象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚函数、模板和包容器类、多重继承、异常处理和运行时类型识别

    内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚函数、模板和包容器...

    面向对象程序设计C++:第5章 多态.ppt

    虚函数的多态调用是通过基类对象引用或指针实现的。 在编译期和运行期绑定中,编译期绑定是在编译期就确定了函数调用的入口地址,而运行期绑定是在编译期并没有确定了函数调用的入口地址,而是在程序运行时。虚函数...

    面向对象(object-oriented).xmind

    面向对象的特性、设计原则,类图 特性 character 封装 encapsulation:隐藏数据,... 运行时多态:对象引用所指向的具体类型在运行时才确定【方法重写(不同类,名相同、参数列表相同、返回值相同)、向上转型】。

    Java期末考试真题试卷及复习资料【高级编程】

    Java期末考试真题试卷及... 多态 答Java引用变量分为编译时的类型和运行时的类型编译时类型由声明该变量时使用的类型决定运行时类型由实际赋给该变量的对象决定如果两类型不一致就出现多态 3.阻塞 答当前正在执行的线

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

    运行时多态是动态多态,具体引用的接口在运行时才能确定。 静态多态和动态多态的区别其实只是在什么时候将函数实现和函数调用关联起来,是在编译时期还是运行时期,即函数地址是早绑定还是晚绑定的。静态多态是指在...

    18春季北理工《面向对象程序设计》在线作业.doc

    运行时多态可以实现对象的多态性。 18. 友元运算符:友元运算符是一种特殊的运算符,它可以被重定义为友元函数。友元运算符可以实现对象之间的交互和合作。 19. 静态数据成员:静态数据成员是一种特殊的成员变量,...

    duotai.java

    Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。 如Student类可以为Person类的子类。那么一个Student对象既可以...

    Java多态中的动态绑定与静态绑定

    1.动态绑定(auto binding):也叫后期绑定,在运行时,虚拟机根据具体对象的类型进行绑定,或者说是只有对象在虚拟机中创建了之后,才能确定方法属于哪一个对象,与引用变量实际引用的对象绑定,调用重写的方法,由...

    面向对象思想.pdf_电子版_pdf版

    在 main() 方法中使用父类 Instrument 来引用 Wind 和 Percussion 对象,并调用 play() 方法时,会执行实际引用对象所在类的 play() 方法,而不是 Instrument 类的方法。 面向对象思想通过封装、继承和多态三大特性...

    JAVA基础(二)String/StringBuffer/StringBuilder/成员变量和局部变量/对象实体和对象引用

    1. JAVA面向对象编程三大特征...多态:程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,在程序运行期间才确定。 两种方式:1.继承——多个子类对同一方法的重写;2.接口——实现

    java核心技术(基础篇)

    java核心技术,基础篇一个对象变量可以引用对种实际类型的现象被叫做多态,对象变量遵行置换法则:超类对 象的任何地方都可以用子类对象置换,但是声明为类型为超类对象的变量就算引用了一个子 类的对象,用该引用还是不...

    .net core 面试题目汇总

    值类型转换成引用类型称为装箱,而引用类型转换成值类型称为拆箱。例如,int 类型的值可以装箱成 object 类型,然后可以拆箱回 int 类型。 3. C# 中类型的修饰符和成员的修饰符: 类的修饰符有 public、internal、...

    java面试真题整理

    运行时多态:重写,对象的多态性(父类的引用指向子类的实例) 5.CSDN 1.泛型的好处 保护类型安全 避免强制类性转化 2.final 1.修饰的属性是常量 2.修饰的方法不能被重写 3.修饰的类不能被继承 String

Global site tag (gtag.js) - Google Analytics