简单一点说呢,多态就是表现多种形态的能力的特征。更术语化一点说,同一个实现接口,使用不同的实例而执行不同的操作。
我们先看以下代码,首先我们定义一个父类:
- public class Person
- {
- public void say()
- {
- System.out.println("大家好,我是父类Person中的say方法");
- }
- }
然后我们再定义两个子类,继承自Person类,并都重写了父类中的say方法
- public class Student extends Person
- {
- public void say()
- {
- System.out.println("大家好,我是子类Student中的say方法");
- }
- }
- public class Teacher extends Person
- {
- public void say()
- {
- System.out.println("大家好,我是子类Teacher中的say方法");
- }
- }
然后,我们再编写一个测试类
- public class Test
- {
- public static void main(String args [])
- {
- hello(new Student());
- hello(new Teacher());
- }
- public static void hello(Person person)
- {
- person.say();
- }
- }
在以上代码MAIN方法中,hello方法的参数类型是父类Person类型的,但是我们在调用时,传入的参数是其子类类型的,程序运行
后的结果是,输出了两个子类的SAY方法
以上,我们就简答的实现了一个多态。
如何实现多态?
1.子类重写父类的方法
Student类,Teacher类都是Person类的子类,两个子类都重写了父类中的say方法.,因此具有不同的方法实现。
2.把父类类型作为参数类型,该父类及其子类的对象作为参数传入
在MAIN方法中的hello方法中,参数类型是Person类型的,而我们在调用的时候,传入的参数是其子类的对象.
这样就避免了为每一个子类编写一个hello方法
3.运行时,根据实际创建的对象类型决定调用哪个方法
这也正是多态的实现机制。一般称为动态绑定。在运行时,JVM会根据实际创建的对象类型决定使用哪个方法。
这样做的好处是,能减少代码的编写量,也能大大的提高代码的可读性以及可扩展性。