多态是java的三大特性之一,java的三大特性分别是(封装、继承、多态)
多态分为两种情况:编译时多态、运行时多态
一、编译时多态
1.在编译时指向目标方法
2.通过 overloading重载实现
3.方法名相同参数不同
二、运行时多态
1.运行期间决定目标方法
2.同名同参
3.通过overloading和继承重写实现
4.JVM决定目标的方法
多态是什么?
一个类的多种形式就是多态
多态实现方式:编译是多态、运行时多态
编译时多态
/** * @Author: zy * @ClassName AddNumbers * @Description 编译时多态 * @Date: 22:31 2023/1/15 **/ public class AddNumbers { public int addition(int x,int y){ return x+y; } public int addition(int x,int y,int z){ return x+y+z; } public double addition(double x,double y){ return x+y; } public static void main(String[] args) { AddNumbers addNumbers = new AddNumbers(); System.out.println(addNumbers.addition(1, 2)); System.out.println(addNumbers.addition(1.22, 3.22)); System.out.println(addNumbers.addition(1,5,6)); } }
运行时多态
package com.polymorphism; /** * @Author: zy * @ClassName Animal * @Description 运行时多态 * @Date: 22:46 2023/1/15 **/ //动物类 class Animal { void eat(){ System.out.println("animal is eat~"); } void run (){ System.out.println("animal is run"); } } //猫类 class Cat extends Animal{ void eat(){ System.out.println("cat is eat"); } void run(){ System.out.println("cat is run"); } } //狗类 class Dog extends Animal{ void eat(){ System.out.println("dog id run "); } } public class AnimalDemo{ public static void main(String[] args) { Animal dog = new Dog(); Animal cat = new Cat(); cat.run(); cat.eat(); dog.eat(); dog.run(); } }
运行时多态实现原理:
JVM通过invokeVirtual指令调用方法