多态

http://blog.sina.com.cn/s/blog_67e46b2c0100jdw0.html

java中的面向对象的三大基本特征是:【封装】、【继承】、【多态】

多态:在程序设计语言中,多态性是指“一种定义,多种实现”。指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

例如,运算符+有多种含义,究竟执行哪种运算取决于参加运算的操作数类型:

 

1+2 ;//加法运算符

“1” + “2”; //字符串连接运算,操作数是字符串

 

JAVA中有两种多态是指:运行时多态和编译时多态。Java的两种多态实现方式,重写和重载分别是运行时多态和编译时多态。重载发生在一个类中.重写发生在子类。

 

(1)方法重载

重载表现为同一个类中方法的多态性.一个类声明多个重载方法就是为一种功能提供多种实现.编译时,根据方法实际参数的数据类型、个数和次序,决定究竟应该执行重载方法中的哪一个.

(2)方法重写

重写发生在子类中。子类重写父类的方法,从而覆盖。在把子类的对象赋值给父类的引用,用父类的引用调用该方法,由具体的子类对象来决定实际执行的是哪个方法。

 

重写实现多态要点:

1.    成员变量、静态方法按照引用变量声明的类型静态绑定;实例方法按照引用变量引用的实例动态绑定。
例如,对于以下这段代码:
Fathers f
new Sons();
System.out.println(“f.var=”+f.var);

System.out.println(“f.staticVar=”+f.staticVar);
f.method();
f.staticMethod();
运行时将会输出如下结果:
f.var=FatherVar

f.staticVar=StaticFatherVar
Son method
Static Father method

2.   Father f = new Son(); f.function();
1
、首先,function()方法在父类中一定有定义,只在子类中定义不可以,子类对该方法重载的函数也不行。例如父类中定义function(int a);子类重载function();调用f.function();编译同样不通过。
2
、执行顺序:先在父类中找到匹配的方法,若子类没有重写,则执行父类方法;
若子类重写,或者同时重载,则寻找最接近的方法进行执行。
较好的程序理解题:
http://www.cnblogs.com/jack204/archive/2012/10/29/2745150.html
存在重写、重载优先级总结为:

3.    存在的条件
多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

4.    静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的引用,则调用谁的版本

 

多态的好处:

可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。

 

其他:

1.    Java语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换。
Animal animal=new Dog(); //
引用变量animal引用一个Animal子类Dog的实例
Dog dog=(Dog)animal; //
向下转型,把Animal类型转换为Dog类型
Creature creature=animal; //
向上转型,把Animal类型转换为 Creature类型
animal=new Cat(); //
引用变量animal引用另一个Animal子类Cat的实例
如果把引用变量转换为子类类型,称为向下转型,如果把引用变量转换为父类类型,称为向上转型。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值