Java SE-多态

一、引入概念

在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写(Override)。

学习继承的时候我们已经了解到引用变量的声明类型可能与其实际类型不符,例如下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class test {
public static void main(String[] args) {
Person p = new Student();
p.run(); // 应该打印Person.run还是Student.run?
}
}

class Person {
public void run() {
System.out.println("Person.run");
}
}

class Student extends Person {
@Override
public void run() {
System.out.println("Student.run");
}
}

运行后我们发现实际上调用的方法是Student的run()方法。

结论:java实例方法调用是基于实例类型的动态调用,而非变量的声明类型。

这个特性在面向对象编程中称为多态

二、多态

指同一个对象,在不同时刻表现出来的不同形态

多态的前提和体现

  • 有继承、实现的关系
  • 有方法重写
  • 有父类引用指向子类对象

多态中成员访问特点

  • 成员变量:编译看左边,执行看左边
  • 成员方法:编译看左边,执行看右边

成员变量和成员方法的访问不一样是由于成员方法有重写,而成员变量没有

多态的好处和弊端

  • 好处:提高了程序的扩展性

具体体现:定义方法时,使用父类作为参数,使用时用具体子类型参与操作

  • 弊端: 不能使用子类特有功能。

多态中的转型

目的:为了解决多态的弊端(不能使用子类特有功能)

猫狗案例

思维导图

Java EE思维导图

请我喝杯咖啡吧~

支付宝
微信