多态
一:
1.什么是多态?
答:
同一父类类型,调用其同一方法后,表现出不同的状态,称为多态
2.什么时候使用多态?
答:
当程序业务有变更时,增加代码的同时,还需要修改原有代码,带来大量的工作量 解决办法:使用多态
3.多态的特点:
父类:定义一个虚方法(没有方法体的方法)
子类:重写父类中的虚方法
4.多态的实现方式及区别:
- ①:方法重载:
用静态的方式实现多态,在程序编译的过程中,重载的方法就已经确定,重载的若干个方法同时加载到内存中,在执行时,根据参数的情况决定调用哪一个方法 - ②:方法重写/方法覆盖:
在编译及内存加载时,子类的方法并没有覆盖掉父类中被重写的方法,只有在调用过程中,判断是哪个子类调用的,然后用这个子类中的方法区覆盖父类中的方法.
由于参数的类型是父类类型,所以调用的是父类中的方法,根据具体传递的实参,实参是哪个子类的类型,就用这个子类中的方法区覆盖掉父类中的虚方法
二:
多态的使用步骤:
- ①:在父类中编写共同的方法,但方法体为空的虚方法
public void eat(){
}
- ②:在子类中重写父类中的虚方法
- ③:在使用时,用父类做类型,具体使用子类对象
里氏替换原则LSP:任何父类出现的位置,都可以使用其子类对象进行替换,方法的参数是父类类型,传递实参时,可以传递其子类对象
三:多态的应用:
对象数组
Pet[] arr = new Pet[10];
Dog dog = new Dog();
dog.setName("狗狗");
dog.setAge(5);
dog.setSex('公');
dog.setStrain("泰迪");
Cat cat = new Cat();
cat.setAge(2);
cat.setName("猫猫");
cat.setSex('母');
cat.setColor("彩色");
Pig pig = new Pig();
pig.setName("猪猪");
pig.setAge(3);
pig.setSex('母');
pig.setLoad(200);
arr[0] = dog;
arr[1] = cat;
arr[2] = pig;