面向对象的三大特性之多态

来源:互联网 发布:win10 mac地址怎么查 编辑:程序博客网 时间:2024/05/17 04:59

多态

什么叫多态

多态: 指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)换句话说,猫和狗都是动物,但它们的叫声不一样,所以猫和狗是动物的多态.

多态的好处

  • 可替换性: 多态对已存在代码具有可替换性。例如:动物会吃东西,但如果是猫会吃鱼,如果是狗会吃肉.
  • 可扩充性: 多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。在实现猫、狗实现多态的基础上,添加老鼠这个新类不会影响猫,狗原有类
  • 接口性: 多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
  • 灵活性: 它在应用中体现了灵活多样的操作,提高了使用效率。
  • 简化性: 多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

实现多态需要三个条件

  • 继承
  • 方法的覆盖
  • 父类引用指向子类对象

简单实例:

父类:

public class Animal {    private int age;    private String voice;    public String getVoice() {        return voice;    }    public void setVoice(String voice) {        this.voice = voice;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String call(){        return "我今年"+age+"岁了"+"我是这样叫的"+voice;    }}

子类:

public class Cat extends Animal {    public Cat cat;    public Cat() {        cat = new Cat();        cat.setAge(2);        cat.setVoice("喵喵喵");    }      @Override    public String call() {        return "我是只猫,我今年"+cat.getAge()+"岁了"+"我是这样叫的"+cat.getVoice();    }}
public class Dog extends Animal {    public Dog dog;    public Dog() {        dog = new Dog();        dog.setAge(5);        dog.setVoice("汪汪汪");    }    @Override    public String call() {        return "我是条狗,我今年"+dog.getAge()+"岁了"+"我是这样叫的"+dog.getVoice();    }}

测试类:

public class Test {    private Test test;    public String animalCall(Animal animal){        return animal.call();    }    public Test() {        test = new Test();        test.animalCall(new Cat());        test.animalCall(new Dog());        test.animalCall(new Animal());    }}

我们看到例子中,我们实现了继承,方法的覆盖以及父类引用指向子类对象这三个条件,所以我们实现了多态特性.

1 0
原创粉丝点击