多态(动态绑定)

多态(动态绑定):是指在执行的过程中判断引用的实际类型,然后调用相应的方法。

多态的三要素:

1.继承

2.重写

3.基类引用指向子类对象


举个例子:

package demo.polymorphism;

class Person{
	private String name;

	Person(String name){
		this.name = name;
	}

	public void display(){
		System.out.println("I'm a Person");
	}
}

class Student extends Person{//继承
	private String school;

	Student(String name,String school){
		super(name);
		this.school = school;
	}

	public void display(){//重写
		System.out.println("I'm a Student");
	}
}

public class Polymorphism{
	public static void main(String [] args){
		Person p = new Student("wujl","www.tcu.edu.cn");//基类引用指向子类对象
		p.display();
	}
}

运行的结果为:

I'm a Student

下图为此段代码运行完成后的内存分配情况:

由以上例子可以知道。

code区中应有两个display方法。但是当Person对象p去调用这个方法时究竟调用哪一个呢?首先,调用哪一个不是由这个对象的引用来决定的,而是看你实际new出来的对象是什么类型的。这里new出来的是Studnet对象,所有调用的Student中display的实现。

解释一下上图中Student对象中Person基类中的Display。这个Display其实是指向这段代码中的Display方法地址的一个引用。当没有new处新的对象的时候,它是指向Person对象的那个Display方法。当真正new出来一个Student对象的时候,这个引用就指向了新new出来的那个对象类型的Display方法的地址。这个过程其实就是动态绑定的过程。所以在最后调用的时候,其实调用的是Student的Display方法,而不是Person类的。


目前就知道这么多,也不知道说清楚了没有。如果有什么不对的地方,还请大家指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值