一、什么是多态
面向对象有三大基本特征:继承、封装、多态。
多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。
多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,从而实现更加灵活的编程,提高系统的可扩展性。
其中多态是方法的多态,属性没有多态
二、多态怎么实现
多态实现的三个必要条件:1、要有继承 2、要有重写 3、要有父类指向子类
下面是代码:
public class Pro11 {
public static void main(String[] args) {
animal p=new animal();
animalShout(p);
animal o=new dog();
animalShout(o);
animal u =new cat();
animalShout(u);
}
public static void animalShout(animal a){
a.shout();
}
}
class animal{
public void shout(){
System.out.println("叫");
}
}
class dog extends animal{
public void shout(){
System.out.println("汪");
}
}
class cat extends animal{
public void shout(){
System.out.println("喵");
}
}
结果分别是 叫、汪、喵。
在上面代码的类中,已经做到了继承和重写。
在主函数main中有父类向子类的引用。
可以想想狗和猫都属于动物,所以动物能用的,狗和猫都可以用。
如果没有这个多态的功能,那么我们还要写两条关于狗猫的动作的代码,所以多态这个功能十分的方便。
三、对象的强制转型
在上面的代码中,我们把狗制动转型成了动物,编译器自动转型,那么如果后面我们需要使用狗的专属的方法怎么办,那么我们需要将其向下强制转型,即d2=(dog)o,但转型只能从上到下转或者从上到下转,同级的不能转型,比如如果想把狗转为猫,那么就算编译器通过最后运行的时候也是不会通过