1、多态是什么?
多态是同一个行为具有多个不同表现形式或形态的能力。
2、Java实现多态必要条件
Java实现多态有三个必要条件:继承、重写、向上转型。
- 继承:在多态中必须存在有继承关系的子类和父类。
- 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
- 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
3、实例
package com.icheny.TestDuoTai;
public class People
{
public void eat()
{
System.out.println("people eat...");
}
public void run()
{
System.out.println("people run...");
}
}
class Student extends People
{
public void sleep()
{
System.out.println("student sleep...");
}
public void run()
{
System.out.println("student run...");
}
}
运行测试1:
package com.icheny.TestDuoTai;
public class Test
{
public static void main(String[] args)
{
//父类People中的方法:eat() run()
People p = new People();
p.eat();
p.run();
}
}
输出:
运行测试2:
package com.icheny.TestDuoTai;
public class Test
{
public static void main(String[] args)
{
//子类Student中的方法:sleep() run()
Student s = new Student();
s.eat();
s.sleep();
s.run();
}
}
输出:
运行测试3:
package com.icheny.TestDuoTai;
public class Test
{
public static void main(String[] args)
{
People p = new Student();
p.eat();
p.run();
}
}
输出:
通过以上三个测试用例可以观察到,指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法。
4、总结
子类Student继承父类People,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类People对象,也可以处理子类Student对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为,这就是多态。即多态性就是相同的消息使得不同的类做出不同的响应。