【Android编程基础第17篇】Java语言中经典的多态性pdf,txt教程

前面我们讲了Java语言中的类和对象,以及继承、接口的概念与使用方法,本期继续讨论Java面向对象编程中一个经典的特性,也是最重要的,多态性(Polymorphism)


简单来说,多态性是指类的方法/运行特性通过不同的实现方式可以表现为多种形态,以提供类中成员设计的灵活性和方法执行的多样性

这里再回顾一下“重载”(Overload)的概念,重载的最终效果就是在某个类中,调用同一个方法名称,却可以根据传入参数的不同而得到不同的处理结果,这其实就是多态性的一种体现

实际上,多态性,还有其他体现方式,典型的有“复写”(或者叫“覆盖”,Override),派生类通过重写超类定义的方法,达到不同的的效果

换一种说法,统一的函数/接口,可以隐藏不同的实现,这样使得可扩展性和可维护性更好

下面根据具体程序来说明
我们先定义Person类及其派生类Engineer,如下

class Person { publicvoid write() { System.out.println(“1.Person{write()}”); } publicvoid talk() { System.out.println(“2.Person{talk()}”); } } // Engineer 类扩展自 Person 类,也就继承了 Person 类中的 write ()、talk ()方法 class Engineer extends Person { // 在这里复写了 Person 类中的 write()方法 publicvoid write() { System.out.println(“3.Engineer{write()}”); } publicvoid talk() { System.out.println(“4.Engineer{talk()}”); } } 执行下面的实例化和write、talk方法调用: Person person = new Engineer(); person.write(); person.talk(); 输出结果为: 3.Engineer{write()} 4.Engineer{talk()} 为什么不是1.Person{write()}和2.Person{talk()}呢? 进一步分析输出结果可以发现, person是超类Person实例化之后的一个对象,但调用其write()方法的时候并没有调用其本身的 write()方法,而是调用了派生类中被复写(覆盖)了的 write ()方法

之所以会产生这样的结果,最根本的原因就是因为超类对象并非由其本身的类进行实例化,而是通过派生类实例化创建产生,这里的超类对象所实现的方法,例如write()和talk(),与原先在超类中实现的并不一样,这就是所谓的对象的多态性,即派生类的实例化对象可以转换为父类实例化对象

在Android编程中,多态性用得比较多,具体在后续可以通过实际的应用程序加深理解

微价值网(公号vjiazhi),专注移动互联网、App推广、盈利以及Android/iOS等技术基础培训



发表回复