多态

多态

多态是继数据抽象和继承之后的第三种基本特征

多态通过分离做什么怎么做。多态不但能过改善代码额组织结构和可读性,还能够创建可扩展的程序——无论什么时候,需要新功能的时候都能添加。多态的作用是消除类型的耦合关系(耦合:对象之间的依赖性,对象之间耦合度越高,维护成本越高。)

###绑定###

概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定。

1.静态绑定:

在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有finalstaticprivate和构造方法是前期绑定。

2.动态绑定:(针对的是方法

后期绑定:在运行时根据具体对象的类型进行绑定。
若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。

多态表现形式:

  1. 父类的引用页可以接收自己的子类对象。
  2. 父类的引用指向自己的子类对象。
  1. 静态方法属于类方法(static修饰,对应的是实例方法,实例方法是要通过创建对象,实例化才能通过对象掉用的方法,类方法可以直接通过类来调用)是静态绑定。
  2. 非静态方法属于动态绑定
  3. 属性成员都属于静态绑定,只和声明的类型相关。(动态方法才有override(重写),静态方法,静态域,动态域都是不会被覆盖的)

Father fson=new Son();

创建一个Son的对象,并把得到的引用立即赋值给Father。fson是父类的引用,类型是Father。

fson调用的静态域,静态方法都是Father的方法,与子类无关。

如果子类Sun中重写了父类的方法,那向上转型中,子类转型为父类的类型,类接口中只可能会丢失方法(子类是父类的超集,丢失子类有而父类没有的方法),那么fsun就不能调用丢失的方法(即父类没有的方法而子类有的方法),但是可以调用子类重写的方法(不是父类的方法),不能调用父类被重写的方法。