Java多态性:Java什么是多态?

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。

Java实现多态有3个必要条件:继承、重写和向上转型。只有满足这3个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

例1

下面通过一个例子来演示重写如何实现多态性。例子使用了类的继承和运行时多态机制,具体步骤如下。

1)创建Figure类,在该类中首先定义存储二维对象的尺寸,然后定义有两个参数的构造方法,最后添加area()方法,该方法计算对象的面积。代码如下:

public class Figure { double dim1; double dim2;
 Figure(double d1, double d2) {  // 有参的构造方法
  this.dim1 = d1;  this.dim2 = d2;
 } double area() {  // 用于计算对象的面积
  System.out.println("父类中计算对象面积的方法,没有实际意义,需要在子类中重写。");  return 0;
 }
}1234567891011121314复制代码类型:[java]

2)创建继承自Figure类的Rectangle子类,该类调用父类的构造方法,并且重写父类中的area()方法。代码如下:

public class Rectangle extends Figure {
 Rectangle(double d1, double d2) {  super(d1, d2);
 } double area() {
  System.out.println("长方形的面积:");  return super.dim1 * super.dim2;
 }
}123456789复制代码类型:[java]

3)创建继承自Figure类的Triangle子类,该类与Rectangle相似。代码如下:

public class Triangle extends Figure {
 Triangle(double d1, double d2) {  super(d1, d2);
 } double area() {
  System.out.println("三角形的面积:");  return super.dim1 * super.dim2 / 2;
 }
}123456789复制代码类型:[java]

4)创建Test测试类,在该类的main()方法中首先声明Figure类的变量figure,然后分别为figure变量指定不同的对象,并调用这些对象的area()方法。代码如下:

public class Test { public static void main(String[] args) {
  Figure figure; // 声明Figure类的变量
  figure = new Rectangle(9, 9);
  System.out.println(figure.area());
  System.out.println("===============================");
  figure = new Triangle(6, 8);
  System.out.println(figure.area());
  System.out.println("===============================");
  figure = new Figure(10, 10);
  System.out.println(figure.area());
 }
}12345678910111213复制代码类型:[java]

从上述代码可以发现,无论figure变量的对象是Rectangle还是Triangle,它们都是Figure类的子类,因此可以向上转型为该类,从而实现多态。

5)执行上述代码,输出结果如下:

长方形的面积:81.0===============================
三角形的面积:24.0===============================
父类中计算对象面积的方法,没有实际意义,需要在子类中重写。0.0
(0)

相关推荐

  • 第5章 子类与继承

    主要内容  子类与父类  子类的继承性  子类与对象  成员变量的隐藏和方法重写 重点与难点:  重点:重点是类的继承性.方法重写.  难点:难点是理解子类继承过程中成员变量的隐藏与方法重 ...

  • 深入理解java多态性

    深入理解java多态性:多态是同一个行为具有多个不同表现形式或形态的能力. 昨天看到一个关于多态性的帖子,参考了回帖者的理解,加入了一些自己的看法,整理出来供大家参考,不一定完全正确,欢迎大家批评指正 ...

  • Java | 在 Java 中执行动态表达式语句: 前中后缀、Ognl、SpEL、Groovy、Jexl3

    在一些规则集或者工作流项目中,经常会遇到动态解析表达式并执行得出结果的功能. 规则引擎是一种嵌入在应用程序中的组件,它可以将业务规则从业务代码中剥离出来,使用预先定义好的语义规范来实现这些剥离出来的业 ...

  • Java教程- Java中hashCode与equals方法

    如何在父类中为子类自动完成hashCode和equals实现,这么做有什么优劣?说一下Object类中hashCode与equals方法的理解,在什么场景下需要实现这两个方法? 有没有可能两个不相等的 ...

  • 找寻gvcf失败的原因(java啊java,配置啊配置)

    最近走我整理和搭建好的:最新版针对RNA-seq数据的GATK找变异流程, 如果样本样品是正常运行,会输出: 920M Nov  9 02:07 SRR2016956_gatk.gvcf  12M N ...

  • Java:Java编程实现导出二维码

    Java:Java编程实现导出二维码 输出结果 更新-- 代码设计 public class QRCodeUtil { private static final String CHARSET = &q ...

  • Java:Java的jar包之POI的简介、安装、使用方法(基于POI将Word、Excel、PPT转换为html)之详细攻略

    Java:Java的jar包之POI的简介.安装.使用方法(基于POI的转换-Word.Excel.Ppt等转html)之详细攻略 POI的简介 Apache POI是Apache软件基金会的开放源码 ...

  • Java学习——37、类的多态(二)

    类型的多态主要体现在:子类是一种父类类型. 子类通过继承扩充和发展了它的父类,子类是父类的一种特殊类型. 1.子类对象即是父类对象 子类对象包含了父类的所有成员,包括成员变量和成员方法,所以子类对象也 ...

  • Java学习——36、类的多态(一)

    多态性是指"一种定义,多种实现".例如,画画.同是画画,但每一个人,会画出来不同的画,这就是多态. 多态主要有方法的多态和类型的多态. 今天介绍方法的多态. 方法的多态包括方法的重 ...

  • Java中的多态详解

    一.多态的概念 多态分为类的多态和方法的多态,类的多态就是一个类型可以有不同的表现形态,什么样的类型才会具备多态呢?只有被多个子类继承或者实现的父类才具备多态的特征,因为在运行期间可以根据具体的子类表 ...