十二、类的多态
- 利用多态可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理。
- 例如如果需要定义一个绘制正方形的方法,通过定义一个正方形类来处理正方形对象,会出现代码冗杂的缺点;通过定义一个正方形和平行四边形的综合类,分别处理正方形和平行四边形对象,也没有太大意义。
- 但是如果定义一个四边形类,让它处理所有继承该类的对象,根据“ 向上转型 ”原则可以使每个继承四边形类的对象作为某方法的参数,然后在该方法中作一些限定就可以根据不同图形类对象绘制相应的图形,从而以更为通用的四边形类来取代具体的正方形类和平行四边形类。这样处理能够很好的解决代码冗杂的问题,同时也易于维护,因为可以加入任何继承父类的子类对象,而父类方法也无须修改。
关于多态的案例:
package lianxi2;
public class Quadrangle
{
// 实例化保存四边形对象的数组对象
private Quadrangle[] qtest = new Quadrangle[6];
private int nextIndex = 0;
public void draw(Quadrangle q)
{ // 定义draw()方法,参数为四边形对象
if (nextIndex < qtest.length)
{
qtest[nextIndex] = q;
System.out.println(nextIndex);
nextIndex++;
}
}
public static void main(String[] args)
{
// 实例化两个四边形对象,用于调用draw()方法
Quadrangle q = new Quadrangle();
q.draw(new Square()); // 以正方形对象为参数调用draw()方法
// 以平行四边形对象为参数调用draw()方法
q.draw(new Parallelogramgle());
}
}
class Square extends Quadrangle
{ // 定义一个正方形类,继承四边形类
public Square()
{
System.out.println("正方形");
}
}
// 定义一个平行四边形类,继承四边形类
class Parallelogramgle extends Quadrangle
{
public Parallelogramgle()
{
System.out.println("平行四边形");
}
}
运行结果:
- 从这个案例的结果可以看出,以不同类的对象为参数调用draw()方法,可以处理不同的图形问题。使用多态节省了开发和维护时间,因为程序员无须在所有的子类中定义执行相同功能的方法,避免了大量重复代码的编写。同时,只要实例化一个继承父类的子类对象,即可调用相应的方法,这里只要维护父类中的这个方法即可。
- 简单来说,多态就是同一个变量,同一个方法,执行出不同的结果。
package lianxi2;
class animal
{
void move()
{
}
}
class fish extends animal
{
void move()
{
System.out.println("游泳");
}
}
class bird extends animal
{
void move()
{
System.out.println("飞翔");
}
}
public class duotai
{
public static void main(String[] args)
{
animal jack=new fish();
jack.move();
jack=new bird();
jack.move();
}
}
运行结果:
- 由程序可以看到,同一个变量jack,同一个方法move(),但是执行结果后却是不同的,实现了多种状态,这样可以减少冗杂的代码,节省开发时间。