多态的应用

多态的优势:

  • 可替换性:多态对已存在的代码具有可替换性。
  • 可扩充性:多态对代码具有可扩充性。增加新的子类不影响已存在类的多态行、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。
  • 接口性:多态是父类向子类提供了一个共同接口,有子类来具体实现。
  • 灵活性:多态在应用中体现了灵活多样的操作,提高了使用效率。
  • 简化性:多态简化了应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

1.使用父类作为方法的形参

使用父类作为方法的形参,是Java中实现和使用多态的主要方式。

示例1

假如狗、猫、鸭3种动物被一个主人领养,这个主人可以控制各种动物胶=叫的行为,实现一个主人类,在该类中定义控制动物的叫法,请实现此功能。

关键代码:

//主人类
class Host{
  public void letCry(Animal animal){
    animal.cry(); //调用动物叫的方法
  }
}
//以上为主人类代码,以下为调用代码
public class Test{
  public static void main(String[] args){
    Host host = new Host();
    Animal animal;
    animal = new Dog();
    host.letCry(animal);  //控制狗叫
    animal = new Cat();
    host.letCry(animal);  //控制猫叫
    animal = new Duck();
    host.letCry(animal);  //控制鸭叫
  }
}

在示例1的主人控制动物叫的方法中,并没有把动物的子类作为方法参数,而是使用Animal父类。当调用letCry()方法时,实际传入的参数是一个子类的动物,最终调用的也是这个子类动物的cry()方法。

2.使用父类作为方法的返回值

使用父类作为方法的返回值,也是Java中实现和使用多态的主要方式。

示例2

假如这3种动物被一个主人领养,这个主人可以根据其他人的要求任意送出一只宠物。送出的宠物可以叫,请实现此功能。

关键代码:

//主人类
class Host{
  //赠送动物
  public Animal donateAnimal(String type){
    Animal animal;
    if(type=="dog"){
       animal = new Dog();
   }else if(type=="cat"){
       animal = new Cat();
   }else{
       animal = new Duck();
   }
    return animal;
 }
}
//以上为主人类代码,以下为调用代码
public class Test{
   public static void main(String[] args){
      Host host = new Host();
      Animal animal;
      animal = host.donateAnimal("dog");
      animal.cry();    // 狗叫
      animal = host.donateAnimal("cat");
      animal.cry();    // 猫叫
  }
}

在上述代码中将父类Animal作为赠送动物方法的返回值类型,而不是具体的子类,调用者仍然可以控制动物叫,动物叫的行为则由具体的动物类型决定。

 

你可能感兴趣的:(多态的应用)