1. 什么是多态
同一操作,作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
对应到 Java 里就是针对同一个类型的对象,执行同一个方法,会表现出不同的行为。
简单点说: 就是用基类(超类或父类)的引用指向子类的对象。
2. 多态的分类
多态分为编译时多态和运行时多态。
其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,通过编译之后会变成两个不同的函数,在运行时谈不上多态。
而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。
编译时多态:
/**
* Created with IntelliJ IDEA.
*
* @Author: zhaoxn
* @Date: 2022/12/21/20:50
* @Description:重载
*/
public class Overload {
void method(int a) {
System.out.println ("一个参数" + a);
}
void method(int a, int b) {
System.out.println ("两个参数: " + a + "," + b);
}
String method(String a,String b) {
System.out.println("三个参数: " + a);
return a+b;
}
//测试类
public static void main(String[] args) {
Overload overload = new Overload();
overload.method(1);
overload.method(1, 2);
overload.method("a","b");
}
}
这里方法method方法重载了 3 次,第一个方法有 1 个 int 参数,第二个方法有 2 个 int 参数,第三个方法有 2个 String 参数。调用哪个方法取决于我们在调用方法时传递的参数。这发生在运行编译时,因此这种类型的多态性称为编译时多态性。
运行时多态:
HashMap实现了Map接口,类图如下:
LinkedHashMap实现了Map接口,类图如下:
代码如下:
格式:父类类型 变量名 = new 子类对象
public static void main(String[] args) {
Map map = new HashMap<>();//new LinkedHashMap();
map.put("key","value");
}
3. 多态需要具备哪些条件?
Java中实现多态需要三个条件:
- 需要有继承关系的存在。
- 需要有方法的重写。
- 需要有父类的引用指向子类对象。
4. 多态的好处
- 提高了代码的维护性(继承保证)
- 提高了代码的扩展性(由多态保证)