java基础-多态是什么?

1.1 什么是多态?

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

定义:多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不一样的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是容许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值以后,父对象就能够根据当前赋值给它的子对象的特性以不一样的方式运做(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:容许将子类类型的指针赋值给父类类型的指针。程序员

面向对象特性:“封装”经过合并特征和行为来建立新的数据类型。而“多态”的做用则是消除类型之间的耦合关系。编程

“继承”容许将对象视为它本身自己的类型或其基本类型来加以处理,它容许将多种类型(从同一基类导出 )视为同一类型来处理。spa

而“多态”方法调用容许一种类型表现出与其余类似类型之间的区别,只要他们都是从同一类型导出的。设计

 

△△△ 我如今这么认为,多态和继承说的是一个事情,都是说的是类与类之间的关系。指针

个人理解是 继承表现的是具备相同成员的基类和导出类的关系。code

而多态表示的是在调用相同类型的时候,表现出来的调用哪一个方法的问题。htm

1.2  多态是如何实现的呢?

答:经过动态绑定。对象

什么是绑定? 抽象来说,将一个方法调用同一个方法主体关联起来被称做绑定。继承

若在程序执行前进行绑定,则称为前期绑定。

而当咱们的方法须要一个基类类型的时候,却传入了一个子类对象,而编译器能在运行时

动态的判断出子类的类型,这种机制就是动态绑定,也叫运行时绑定或者后期绑定。

想一下就能知道,这是经过在对象中加入了“类型信息”实现的。

△△△ 注意:java中除了static 和 final方法以外,其余的方法都是动态绑定的。

当咱们为一个方法定义为final的时候,除了能够防止其余人覆盖该方法,还有就是告诉编译器,这个方法不须要动态绑定,编译器就能够为final方法的调用生成更为有效的方法。

咱们知道了全部方法都是经过动态绑定来实现多态这个事实以后,咱们就能够大胆编写只和基类打交道的程序代码了。

1.3  多态实现可扩展

package polymorphism.music;

public class Music {
	public static void tune(Instrument i) {
		// ...
		i.play(Note.MIDDLE_C);
	}

	public static void main(String[] args) {
		Wind flute = new Wind();
		tune(flute); // Upcasting
	}
}

 

好比在这个类当中,咱们的方法tune()只和基类Instrument打交道,当咱们须要新的乐器的时候,不须要改变原来的tune()。只须要建立新乐器类型就行了。在一个设计良好的OOP程序中,大多数或者全部的方法都会遵循tune()模型,并且只与基类接口通讯,这就实现了可扩展性。

 

也就是说,咱们所修改的代码,不会对程序中其余不该收到影响的部分产生破坏。

换句话说,多态是让程序员”将改变的事物与未改变的事物分离“的重要技术。

 

 

著做权归@kfh全部转载请注明出处

相关文章
相关标签/搜索