多态:是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行是才确定,即一个引用变量到底会指向那个类的实例对象,该引用变量发出的方法调用是哪个类中实现的方法,必须由程序运行期间才能决定。
读者看了之后,大概感觉就是,“脸上笑嘻嘻,心里mmp,说人话”。
举例简单说明一下:
假如我们有一个Person类,有一个speak()的方法,那么 Person person = new Person(); 都知道 person.speak();是调用的Person的person这个实例的speak()方法。 如果我们还有一个Man类,继承Person,重写speak()方法,然后我们Person person2 = new Man();,调用person2.speak(); 你们猜是会调用父类的speak()方法,还是子类的speak()方法。
然后运行一下才知道,是调用子类的speak方法。
package com.jet.knowledge.polymorphic; public class Person { public void speak(){ System.out.println("运行父类的speak()方法"); } } class Man extends Person{ @Override public void speak() { System.out.println("运行子类的speak()方法"); } } class test{ public static void main(String[] args) { Person person = new Person(); person.speak(); Person person2 = new Man(); person2.speak(); } }运行父类的speak()方法 运行子类的speak()方法
然后我们再看上面的定义: 1、程序中定义的引用变量:person,person2 2、指向的具体类型: new Person(),new Man() 3、通过该引用变量发出的方法调用:person.speak(), person2.speak() 4、编译时不确定:√
多态分为编译时多态和运行是多态,我们所说的多态大多是运行时多态。
这个要理解需要有一定的方法区的概念,我只想说,我自己还没有理解到。
Java 多态的实现机制 面试|如何理解Java中的多态 面试题:什么是多态?怎样才能实现多态?