- 浏览: 306824 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lzy.je:
期待FSF的!1985.10成立到现在GNU有多少大牛的项目数 ...
改变IT世界的11大Apache开源技术 -
dotaking:
7、8不了解
改变IT世界的11大Apache开源技术
Java编程—多态性
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运算符进行判断。 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,可以存储各个类型子类的对象,而数组中每个元素的值都是存储的对应子类的对象,而只是在名义上的类型(语法上的类型)是SuperClass类型的,这样将方便程序的控制,当增加新的子类类型时,已有的代码不需要进行改造就可以自动适应新的子类的结构。 例如新增了一个SuperClass的子类SubbClass3,则该数组的代码可以修改成如下: SuperClass sc[] = new SuperClass[3]; sc[0] = new SubbClass1(); sc[1] = new SubbClass2(); sc[2] = new SubbClass3(); 其它的代码都需要进行修改,就可以适应新的结构,这是多态性最主要的用途。 2. 对象的传递 在方法的传入参数传递,以及返回值处理方面都从对象类型的多态中受益。在向方法中传入参数时,如果该方法需要处理各个子类的对象,则只需要书写一个接受父类类型对象的方法即可。例如: public void testObjectTypeMethod(SuperClass sc){} 则该在调用该方法时,可以传入SuperClass的对象,也可以传入其子类的对象,如果传入的是子类的对象,则子类对象中的内容不会丢失。例如调用的示例代码如下: SuperClass sc = new SuperClass(); SubbClass1 sc1 = new SubbClass1(); SubbClass2 sc2 = new SubbClass2(); testObjectTypeMethod(sc); testObjectTypeMethod(sc1); testObjectTypeMethod(sc2); 这里说明的只是调用时的语法结构,这样的特性将使我们只需要书写一个方法,就可以处理所有子类的对象,简化代码的书写,降低代码的重复,从而降低维护的难度。 另外,方法的返回值也可以利用到该特性,例如如下方法: public SuperClass testObjectTypeMethod2(){} 则在该方法的内部,既可以返回SuperClass类型的对象,也可以返回其子类的对象,也能简化代码的书写,便于代码的阅读和维护。 关于对象类型的多态,就简单的说明这么多,具体在项目中如何进行使用,还需要一定的技巧和方法。 8.5.3.2 对象方法的多态 对象方法的多态基于方法的覆盖,也就是该对象调用的方法具体是子类的方法还是父类的方法,由创建对象时使用的构造方法决定,而不是由声明对象时声明的类型决定。 示例代码如下: /** * 测试对象方法的多态 */ public class TestObjectMethod { public static void main(String[] args) { SuperClass sc = new SuperClass(); SubbClass1 sc1 = new SubbClass1(); SubbClass2 sc2 = new SubbClass2(); SuperClass sc3 = new SubbClass1(); testObjectTypeMethod(sc); testObjectTypeMethod(sc1); testObjectTypeMethod(sc2); testObjectTypeMethod(sc3); } public static void testObjectTypeMethod(SuperClass sc){ sc.test(); //调用被覆盖的方法 } } 该代码的执行结果如下: SuperClass SubbClass1 SubbClass2 SubbClass1 则从代码的执行结果看,虽然testObjectTypeMethod方法接收的是SuperClass类型的对象,但是传入子类对象时,子类对象的内容没有丢失,所以在调用test方法时,还是调用的对应对象中对应的test方法。 这样就在功能上实现了对象的传递,从而保留了对象的内容,极大的方便了代码的扩展性。 但是,由于Java在执行程序时,在程序运行的过程中,需要判断对象调用的具体是父类的方法还是子类的方法,所以程序的执行速度会稍微有所降低。 |
发表评论
-
java中文问题的分类
2008-12-23 13:12 705中文问题的分类及其建议最优解决办法 <?xml:name ... -
Java编程——继承(二)
2009-01-05 17:48 578方法覆盖 前面介绍了继承的一些基础知识,现在介绍一 ... -
Java编程——类(二)
2009-01-05 18:01 5728.2.2.3 构造方法声明 构 ... -
详细解析Java中抽象类和接口的区别
2009-01-06 13:46 605在Java语言中, abstract ... -
[强列推荐]关于java的hashCode方法
2009-03-12 11:39 750[强列推荐]关于java的hashCode方法 有许多人学了 ... -
Java类完整的构造执行顺序
2009-04-02 11:17 1002Java类完整的构造执 ... -
java异常机制介绍
2009-04-28 14:35 769java异常机制介绍 Java 语言要求 java ... -
Java安全通信、数字证书及应用实践
2009-05-31 11:54 744Java安全通信、数字证书及应用实践【IT168 技术文档】一 ... -
Java安全通信、数字证书及应用实践
2009-05-31 11:55 803二、 Java中的数字证书 ... -
Java安全通信、数字证书及应用实践
2009-05-31 11:58 945三、数字证书的签发(签名) 我们在上面创建好了数字证书,但 ... -
Java安全通信、数字证书及应用实践
2009-05-31 12:03 829四、运行我们的 applet 我们来写一个 html文件来 ... -
Java调用批处理或可执行文件
2009-06-24 15:24 879Java调用批处理或可执 ... -
Java SE 6 新特性: JMX 与系统管理
2009-06-29 14:39 7522006 年底,Sun 公司发布了 Java St ... -
Java:接口回调
2009-07-08 17:32 1044Java:接口回调 接口回调是指:可 ... -
Java Exception 处理之最佳实践
2009-07-08 17:48 650关键字: java/java编程 本文是Except ... -
JAVA对数字证书的常用操作
2009-07-10 10:54 693一需要包含的包 import java.security.* ... -
Java网络编程
2009-07-13 11:12 8681. 什么是TCP/ IP协议? 2. TCP/IP有哪 ... -
java 常用知识
2009-07-13 11:25 7011:关于设置的classpath: 1) ... -
Java语言中的面向对象特性
2009-07-13 11:33 1116课前索引 【课前思考 ...
相关推荐
Java多态性实验报告 1、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的基本算术运算:加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果...
关于java多态性和abstract修饰的使用 一个具体的实例 简单易懂
编程语言java多态性.pdf
Java 中的多态性是一个概念,我们可以通过它以不同的方式执行单个操作。多态性源自两个希腊词:poly 和 morphs。“poly”这个词意味着许多,“morphs”意味着形式。所以多态性意味着多种形式。
Java多态性实验报告 1、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的基本算术运算:加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果....
Java程序设计:chapter06 多态性.ppt
● 可以在Java Applet和应用程序中播放各种媒体文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件。 ● 可以播放从互联网上下载的媒体流。 ● 可以利用麦克风和摄像机一类的设备截取音频和视频,并保存成...
【完整课程列表】 ...优质java课件 java程序设计教程(第6版)01.计算机系统概述(共42页).ppt 优质java课件 java程序设计教程(第...多态性(共41页).ppt 优质java课件 java程序设计教程(第6版)10.异常(共56页).ppt
JAVA面向对象编程继承性和多态性PPT教案学习.pptx
Java面向对象程序设计多态性.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~
Java语言程序设计(第二版)\第05章 类的继承性与多态性.ppt
JAVA面向对象编程第四章继承性和多态性 课件.ppt
熟练使用多态性是程序设计者运用面向对象方法进行程序设计的关键,而理解多态性实现机制则是熟练使用多态性的关键。为充分理解多态性的实现机制,采用比较方法,深入分析比较了C++和java的多态性在使用方法、要点、内部...
Java面向对象程序的设计多态性.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~
Java中的多态性指在一个类实例化时,它可以引用多种不同类型的对象并自动调用适当的方法。这个特征让Java程序员能够更加灵活地编写...总之,多态性允许我们创建更加灵活和可扩展的程序,这是Java编程的核心概念之一。
Java面向对象程序设计多态性PPT共20页.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~
运行时多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制,下面...
【完整课程列表】 ...优质java课件 java程序设计教程(第6版)01.计算机系统概述(共42页).ppt 优质java课件 java程序设计教程(第...多态性(共41页).ppt 优质java课件 java程序设计教程(第6版)10.异常(共56页).ppt
Java中的多态性指在一个类实例化时,它可以引用多种不同类型的对象并自动调用适当的方法。这个特征让Java程序员能够更加灵活地编写...总之,多态性允许我们创建更加灵活和可扩展的程序,这是Java编程的核心概念之一。
【完整课程列表】 ...优质java课件 java程序设计教程(第6版)01.计算机系统概述(共42页).ppt 优质java课件 java程序设计教程(第...多态性(共41页).ppt 优质java课件 java程序设计教程(第6版)10.异常(共56页).ppt