快速业务通道

Java编程那些事儿63—多态性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24

Java编程那些事儿63—多态性

时间:2010-03-11 csdn 陈跃峰

8.5.3 多态性

多态性是面向对象技术中最灵活的特性,主要是增强项目的可扩展性,提高代码的可维护性。

多态性依赖继承特性,可以把多态理解为继承性的扩展或者深入。

在这里把多态性分为两方面来进行介绍,对象类型的多态和对象方法的多态。

为了方便后续的讲解,首先给出一个继承结构的示例。

//文件名:SuperClass.java public class SuperClass{  public void test(){   System.out.println(“SuperClass”);  } } // 文件名:SubbClass1.java public class SubbClass1 extends SuperClass{  public void test(){   System.out.println(“SubbClass1”);  } } // 文件名:SubbClass2.java public class SubbClass2 extends SuperClass{  public void test(){   System.out.println(“SubbClass2”);  } }

在该示例代码中,SubbClass1和SubbClass2是SuperClass的子类,并且在子类的内部都覆盖父类中的test方法。由于这三个类中都书写构造方法,则按照默认构造方法的约定,每个类中都会被自动添加一个默认的构造方法。

8.5.3.1 对象类型的多态

对象类型的多态是指声明对象的类型不是对象的真正类型,而对象的真正类型由创建对象时调用的构造方法进行决定。例外,按照继承性的说明,子类的对象也是父类类型的对象,可以进行直接赋值。

例如如下代码:

SuperClass sc = new SubbClass1();

这里声明了一个SuperClass类型的对象sc,然后使用SuperClass的子类SubbClass1的构造方法进行创建,因为子类类型的对象也是父类类型的对象,所以创建出来的对象可以直接赋值给父类类型的对象sc。除了对象的赋值以外,另外一个更重要的知识是sc对象虽然使用SuperClass声明的类型,但是内部存储的却是SubbClass1类型的对象。这个可以Java语言的中instanceof运算符进行判断。

Java编程那些事儿63—多态性(2)

时间:2010-03-11 csdn 陈跃峰

instanceof是一个运算符,其作用是判断一个对象是否是某个类类型的对象,如果成立则表达式的值为true,否则为false。语法格式如下:

对象名 instanceof 类名

需要注意的是:这里的类名必须和声明对象时的类之间存储继承关系,否则将出现语法错误。

测试类型的代码如下:

/** * 测试对象类型的多态 */ public class TestObjectType {  public static void main(String[] args) {   SuperClass sc = new SubbClass1();   boolean b = sc instanceof SuperClass;   boolean b1 = sc instanceof SubbClass1;   System.out.println(b);   System.out.println(b1);  } }

该测试程序的输出结果是:

true

true

由程序运行结果可以看出,sc既是SuperClass类型的对象,也是SubbClass1类型的对象,而SubbClass1的类型被隐藏起来了,这就是对象的多态。其实sc对象不仅仅在类型上是SubbClass1类型的,其存储的内容也是SubbClass1的内容,具体参看后面介绍的对象方法的多态。

对象类型的多态有很多的用途,极大的方便了对象的存储和传递,使代码很方便的进行扩展,对于已有代码不产生影响。下面介绍两个基本的使用。

1.对象的存储

在存储一系列不同子类的对象时,可以使用父类的结构来进行声明,这样可以方便数据的存储,例如需要存储多个SubbClass1和SubbClass2的对象时,则可以声明一个SuperClass类型的数组进行存储,示例代码如下:

SuperClass sc[] = new SuperClass[3];

sc[0] = new SubbClass1();

sc[1] = new SubbClass2();

sc[2] = new SubbClass1();

则这里的数组sc,可以存储各个类型子类的对象,而数组中每个元素的值都是存储的对应子类的对象

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号