Java多态学习

1. 在面向对象中,多态是继数据抽象和继承的第三种基本特征。那什么是多态呢,又是如何实现呢?我们只要把握好多态将接口和实现分离开来,也就是分离了做什么和怎么做。

2. Java中通过实现动态绑定实现多态。

    假设我们有一个Book的类,继承Book的两个子类Book1、Book2,我们有一个方法需要接收两个子类作为参数,这时候,多态允许我们直接接收基类作为参数。然而我们却无法得知传进来的参数究竟是哪个类。面向过程中例如C,C中只有一种调用,即仅使用前期绑定,但是前期绑定仍然不能确定。Java中除了static和final方法外所有的方法使用的都是后期绑定(动态绑定或者运行时绑定),即存在一种机制,使得在方法运行时根据对象的类型进行绑定。编译器一直不知道对象的类型,但是可以通过某种方法找到正确的方法体。这样的话,我们就可以放心的同基类打交道。

    例如:

class Shape{

    public void draw(print("Shape.draw()")){}

    public void erase(){}

}

class Circle extends Shape {

    public void draw(print("Circle.draw()")){}

}


Shape s= new Circle();

s.draw();

//output

Circle.draw()

这告诉我们new的对象已经绑定了draw方法,调用的子类方法而非Shape方法。

而我们要注意的是:

(1) private方法是不可被重载的,在这里若Shape中draw()为private方法,那么结果将为

//output

Shape.draw()

(2)域和静态方法,例如Shape、Circle中分别增加public int  num = 0;public int  num = 1;则按照以上调用添加输出num,我们会发现num=0;这就是子类和基类分别形成了不同的num域,这里Circle.num和Shape.num分配了不同的存储空间,这就相当于s拥有两个num的域,而这里默认的是Circle.num。

    静态方法与类而并非单个对象相关联的,不具有多态性。





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值