在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(“数学教研室”);//错误
除了父类和子类之间的这种多态机制外,接口和实现它的类之间也可以象父类和子类一样实现多态机制,只需要简单的将接口看成实现它的类的“父类”即可
分享到:
相关推荐
概述 ..........Java语言认识 ..........Java底层平台认识 .....JDK安装与配置 ..........安装JDK ..........设置环境变量 ..........虚拟机的内存 .....JDK工具使用 ..........javac.exe(编译) ..........java.exe...
Java语言中多态的概述 Java语言中的多态性是面向对象编程的三个重要特征之一。方法的重载和方法的重写都是Java多态性的表现形式。多态性使得Java语言在实际应用中变得更加灵活和强大。本文将从多态的概念和多态的...
day10_15_多态的概述
概述 在面向对象编程中,继承和多态是两个非常重要的概念。本章节主要介绍C++中的这两个概念及其应用。 #### 2. 基础概念 ##### 2.1 类与对象 面向对象编程的核心是类和对象的概念。类是一种自定义的数据类型,...
Java 语言概述 Java 是一种高级的、面向对象的编程语言,由Sun Microsystems公司在1991年发起的“Green项目”中孕育而生。最初的设计目标是为消费电子市场,特别是嵌入式设备提供软件解决方案。随着项目的推进,...
面向对象程序设计(Object-Oriented Programming,OOP)是一种基于对象概念的编程范式,它将数据结构和操作这些数据的方法封装在一起,...课程概述.ppt,学生可以对整个课程有一个全面的认识,为后续的学习做好准备。
Java 继承和多态详解 本节课主要介绍 Java 语言中的继承和多态机制,帮助学生掌握继承和多态的基本概念和应用。 继承 继承是 Java 语言中的一种机制,允许开发者创建一个新的类,并继承现有类的特性。继承的目的...
##### 多态概述: 一个事务有多种形态(身份). 在Java中是指一个对象具有多个数据类型.
多态概述 多态是面向对象编程(Object-Oriented Programming,OOP)中一个重要的概念,它允许我们使用不同的类和对象来实现相同的接口和行为。在C++中,多态是通过虚函数(Virtual Function)和虚继承(Virtual ...
**题目概述:** 设计一个员工管理系统,员工具有共同的属性(姓名、工号)和不同的职能。不同类型的员工在介绍自己时有不同的方式。 **解决方案:** 1. **定义基础类 `Employee`**:包含所有员工共有的属性和方法。...
首先,"C++概述.ppt"提供了对C++语言的整体介绍,包括它的历史背景、与C语言的关系以及C++的主要特性,如封装、继承和多态。这部分内容是理解和学习C++的基础,讲解了C++如何通过面向对象编程来提高代码的组织性和可...
一、多态的概述 ava作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。 Java中多态的代码体现在一个子类对象(实现类对象)既可以给这...
第1讲 Java程序设计概述 第2讲 结构化程序设计 第3讲 对象与类 第4讲 继承和多态 第5讲 接口和内部类 第6讲 异常 第7讲 数组 第8讲 集合 第9讲 Java输入和输出系统 第10讲 图形用户界面 第11讲 事件处理 第12讲 ...
#### 概述 多态是面向对象编程中的一个重要概念,它允许程序员在不指定具体类型的情况下处理不同类型的对象。本文将深入探讨多态在编译器层面是如何实现的,特别是关注虚拟函数表(vtable)的概念及其在实现多态中...
**C++多态性概述** 在C++编程语言中,多态性(Polymorphism)是面向对象编程的三大核心特性之一,另外两个是封装和继承。多态性允许我们使用一个接口来表示多种不同的类型,它使得代码更加灵活、可复用且易于维护。...
#### 一、多态概述 多态是面向对象编程的核心特性之一,它允许我们在不知道具体对象类型的情况下处理对象。多态的实现方式多种多样,但通常分为编译时多态和运行时多态两种。本篇文章主要探讨运行时多态,也就是...
#### 一、概述 多态是面向对象编程语言中的一个核心特性,它允许程序员能够使用基类的指针或引用指向派生类的对象,并在运行时根据对象的实际类型来选择合适的方法进行调用。这一特性增强了程序的灵活性和可扩展性...
#### 一、面向对象编程概述 在Java语言中,面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它通过将程序分解为一系列相互作用的对象来组织代码。这种方式极大地提高了代码的可重用性和模块化...
### 面向对象基础知识概述 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和处理数据的方法绑定在一起,形成一个整体——对象。OOP 的主要特征包括封装、继承和多态。 1. **封装**:...