去完成某一个动作的时候,当不同的对象去完成时所产生的状态不同。
1、必须在继承体系下。
2、子类必须要对父类的方法进行重写。
3、通过父类的引用调用重写的方法。
多态的体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。
class Shapy {
public void drad() {
System.out.println("画图形");
}
}
class Cycle extends Shapy{
@Override
public void drad() {
System.out.println("⚪");
}
}
class Rect extends Shapy{
@Override
public void drad() {
System.out.println("矩形");
}
}
class Triangle extends Shapy{
@Override
public void drad() {
System.out.println("🔺");
}
}
//--------------------------------------------------
public class test11152 {
public static void drawMap(Shapy shapy) {
shapy.drad();
}
public static void main(String[] args) {
Cycle cycle = new Cycle();
Rect rect = new Rect();
Triangle triangle = new Triangle();
drawMap(cycle);
drawMap(rect);
drawMap(triangle);
}
}
/*运行结果
⚪
矩形
🔺*/
在上述代码中 , 分割线上方的代码是 类的实现者 编写的 , 分割线下方的代码是 类的调用者 编写的 .
当类的调用者在编写 drad 这个方法的时候 , 参数类型为 Animal ( 父类 ), 此时在该方法内部并 不知道 , 也不关注 当前的drad引用指向的是哪个类型( 哪个子类 ) 的实例 . 此时 drawMap这个引用调用 drad方法可能会有多种不同的表现(和 drawMap 引用的实例 相关), 这种行为就称为 多态,即同一个引用,调用同一个方法,但因为引用的对象不同,所表现的行为不一样。