莫度编程网

技术文章干货、编程学习教程与开发工具分享

安卓编程基础:Java语言中经典的多态性

前面我们讲了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等技术基础培训。

我们的微价值,就是你的大价值!

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    Powered By Z-BlogPHP 1.7.4

    蜀ICP备2024111239号-43