`
liuwei1981
  • 浏览: 771808 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:161181
社区版块
存档分类
最新评论

75.多态概述

 
阅读更多

在Java中,对象变量是多态的。一个类型为Aclass的变量既可以指向类型为Aclass的对象,又可以指向Aclass的任何子类的对象。


以多态的形式来传递参数,增强了参数类型的灵活性。


现在假设有一个类Aclass,由它派生了一个子类Bclass,那么,我们可以将子类Bclass的对象赋给父类变量:
Aclass a = new Bclass();


这其实体现了Java中的所谓“替换原则(substitution principle)”:无论何时,只要程序需要一个父类对象,那么就可以用一个子类对象来替代它。


多态带来的一个明显的好处就是:以多态的形式来传递参数,增强了参数类型的灵活性


例如,我们需要在学校管理系统的某个类(假设为CalClass)中定义一个方法来根据学生或老师的年龄来计算相应的出生年代(此处“Teacher”类和“Stucent”类均为“Person”类的子类),可以这样来定义这个方法:
public class CalClass{
 … …
 public int calTeacherBirthYear(Teacher t){
  // 根据参数t的年龄来计算教师的出生年代
 }
 public int calStudentBirthYear(Student s){
  // 根据参数s的年龄来计算学生的出生年代
 }
}
如果使用多态的概念,我们只要定义一个方法来计算就可以了:
public class CalClass{
 .. …
 public int calPersonBirthYear(Person p) {
  // 根据参数p的年龄来计算出生年代
 }
}


如果需要计算某个学生的出生年代,只需要将这个学生对应的对象当作参数传递给这个方法,如果需要计算某个老师的出生年代,只需要将这个老师对应的对象当作参数传递给这个方法。


在使用多态来传递参数的时候,有一个问题需要注意:一个对象只能有一种确切的数据类型,如果将一个变量声明为父类的引用类型,那么,即使它引用的对象是某个子类的对象,编译器也只是将这个对象当作是父类型对象,因此,若一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法。


比如,我们用Person来声明一个变量,然后再将这个变量指向Teacher,这个时候,就不能用这个变量来调用子类Teacher特有的方法或属性了:
 Person p;
 p = new Teacher();
 p.setDepartment(“数学教研室”);//错误


除了父类和子类之间的这种多态机制外,接口和实现它的类之间也可以象父类和子类一样实现多态机制,只需要简单的将接口看成实现它的类的“父类”即可

分享到:
评论

相关推荐

    J2SE技术总结-Java学习精华教程-电子书

    概述 ..........Java语言认识 ..........Java底层平台认识 .....JDK安装与配置 ..........安装JDK ..........设置环境变量 ..........虚拟机的内存 .....JDK工具使用 ..........javac.exe(编译) ..........java.exe...

    Java语言中多态的概述.pdf

    Java语言中多态的概述 Java语言中的多态性是面向对象编程的三个重要特征之一。方法的重载和方法的重写都是Java多态性的表现形式。多态性使得Java语言在实际应用中变得更加灵活和强大。本文将从多态的概念和多态的...

    day10 15 多态的概述

    day10_15_多态的概述

    第十一章继承与多态

    概述 在面向对象编程中,继承和多态是两个非常重要的概念。本章节主要介绍C++中的这两个概念及其应用。 #### 2. 基础概念 ##### 2.1 类与对象 面向对象编程的核心是类和对象的概念。类是一种自定义的数据类型,...

    java课件--1.语言概述

    Java 语言概述 Java 是一种高级的、面向对象的编程语言,由Sun Microsystems公司在1991年发起的“Green项目”中孕育而生。最初的设计目标是为消费电子市场,特别是嵌入式设备提供软件解决方案。随着项目的推进,...

    面向对象程序设计(使用VS2005和C#)课件-0.课程概述

    面向对象程序设计(Object-Oriented Programming,OOP)是一种基于对象概念的编程范式,它将数据结构和操作这些数据的方法封装在一起,...课程概述.ppt,学生可以对整个课程有一个全面的认识,为后续的学习做好准备。

    java概述课件11继承和多态.ppt

    Java 继承和多态详解 本节课主要介绍 Java 语言中的继承和多态机制,帮助学生掌握继承和多态的基本概念和应用。 继承 继承是 Java 语言中的一种机制,允许开发者创建一个新的类,并继承现有类的特性。继承的目的...

    java中的三大特性之多态.md

    ##### 多态概述: ​ 一个事务有多种形态(身份). ​ 在Java中是指一个对象具有多个数据类型.

    C++课程,多态练习题

    多态概述 多态是面向对象编程(Object-Oriented Programming,OOP)中一个重要的概念,它允许我们使用不同的类和对象来实现相同的接口和行为。在C++中,多态是通过虚函数(Virtual Function)和虚继承(Virtual ...

    .archivetemp04 - 继承和多态 作业.doc

    **题目概述:** 设计一个员工管理系统,员工具有共同的属性(姓名、工号)和不同的职能。不同类型的员工在介绍自己时有不同的方式。 **解决方案:** 1. **定义基础类 `Employee`**:包含所有员工共有的属性和方法。...

    c++部分简单的课件(概述,类,多态等)

    首先,"C++概述.ppt"提供了对C++语言的整体介绍,包括它的历史背景、与C语言的关系以及C++的主要特性,如封装、继承和多态。这部分内容是理解和学习C++的基础,讲解了C++如何通过面向对象编程来提高代码的组织性和可...

    duotai.java

    一、多态的概述 ava作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。 Java中多态的代码体现在一个子类对象(实现类对象)既可以给这...

    java基础学习课件 第1讲 Java程序设计概述 第2讲 结构化程序设计第3讲 对象与类第4讲 继承和多态.....

    第1讲 Java程序设计概述 第2讲 结构化程序设计 第3讲 对象与类 第4讲 继承和多态 第5讲 接口和内部类 第6讲 异常 第7讲 数组 第8讲 集合 第9讲 Java输入和输出系统 第10讲 图形用户界面 第11讲 事件处理 第12讲 ...

    多态的编译器实现原理

    #### 概述 多态是面向对象编程中的一个重要概念,它允许程序员在不指定具体类型的情况下处理不同类型的对象。本文将深入探讨多态在编译器层面是如何实现的,特别是关注虚拟函数表(vtable)的概念及其在实现多态中...

    C++多态PPT

    **C++多态性概述** 在C++编程语言中,多态性(Polymorphism)是面向对象编程的三大核心特性之一,另外两个是封装和继承。多态性允许我们使用一个接口来表示多种不同的类型,它使得代码更加灵活、可复用且易于维护。...

    多态题目解析

    #### 一、多态概述 多态是面向对象编程的核心特性之一,它允许我们在不知道具体对象类型的情况下处理对象。多态的实现方式多种多样,但通常分为编译时多态和运行时多态两种。本篇文章主要探讨运行时多态,也就是...

    C++和Java多态的区别

    #### 一、概述 多态是面向对象编程语言中的一个核心特性,它允许程序员能够使用基类的指针或引用指向派生类的对象,并在运行时根据对象的实际类型来选择合适的方法进行调用。这一特性增强了程序的灵活性和可扩展性...

    java 笔记, 讲解多态 面向对象

    #### 一、面向对象编程概述 在Java语言中,面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它通过将程序分解为一系列相互作用的对象来组织代码。这种方式极大地提高了代码的可重用性和模块化...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    ### 面向对象基础知识概述 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和处理数据的方法绑定在一起,形成一个整体——对象。OOP 的主要特征包括封装、继承和多态。 1. **封装**:...

Global site tag (gtag.js) - Google Analytics