多态
什么叫多态
多态: 指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)换句话说,猫和狗都是动物,但它们的叫声不一样,所以猫和狗是动物的多态.
多态的好处
- 可替换性: 多态对已存在代码具有可替换性。例如:动物会吃东西,但如果是猫会吃鱼,如果是狗会吃肉.
- 可扩充性: 多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。在实现猫、狗实现多态的基础上,添加老鼠这个新类不会影响猫,狗原有类
- 接口性: 多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
- 灵活性: 它在应用中体现了灵活多样的操作,提高了使用效率。
- 简化性: 多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
实现多态需要三个条件
- 继承
- 方法的覆盖
- 父类引用指向子类对象
简单实例:
父类:
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());
}
}
我们看到例子中,我们实现了继承,方法的覆盖以及父类引用指向子类对象这三个条件,所以我们实现了多态特性.