19_多态及引用类型的转化

多态:

  多态是继封装、继承之后,Java面向对象中的第三个特性
  同一行为,通过不同的事物,可以体现出不同的形态。多态,描述的就是这样的状态

定义:

  是指同一行为(方法),具有多个不同的表现形式

多态的前提:

  1.继承或者实现【二选其一】
  2.方法的重写[意义提现:【不重写,无意义】
  3.父类引用指向子类对象【格式提现】

多态的体现:

  格式:(类型转换 父类的转子类)
  父类类型 变量名 = new 子类类型();
    变量名.方法名();

父类类型:指子类对象继承的父类类型,或者实现的父接口类型。

  如:
                    Fu  fu  =  new  Zi();
                    fh.method();

备注:当你在使用多态的时候,程序会首先检查父类中是否含有该方法,
如果没有,择编译错误; 如果有,执行的是子类重写之后的方法。

多态的好处:

   在程序开发过程中,父类类型一般作为方法形式参数,传递子类对象给方法,
当你进行方法的调用,更能体现出多态的扩展性和便利性。
  总结:由于多态特性的支持,不仅仅是替代,在扩展性方面,无论之后再出现多少个字类,
  我们不需要再重复的定义showXxxEat()方法,直接使用showAnimalEat()方法。
  所以多态的好处,体现在可以使程序编写更简单,并且有良好的扩展性。

引用类型的转化

  引用类型就好比多态中的父类引用指向子类就是

    多态的转型为:向上转型和向下转型

  向上转型:   

        多态本身是子类类型向上转换的过程,这个过程是默认的。
        当父类引用指向一个子类对象的时候,便是向上转型。

  格式:

                 父类类型   变量名   =   new   子类类型();
                  如:Animal  animal = new Cat();                

  向下转型:  

        父类类型向子类类型向下转换的过程,这个过程是强制的。一个已经向上转型的子类对象,将父类引用转换为子类引用,可以使用强制类型转换格式,便是向下转型。

  格式:    

  

                    子类类型   变量名  =  (子类类型)父类变量名;
                     如  Cat  cat  = (Cat)  animal;    

为什么要转型?

  当使用多态方式调用方法时,首先会检查父类中是否含有该方法,如果没有,则编译错误,进一步说,不能直接调用子类拥有而父类没有的方法。所以,想要调用子类特有的方法,必须向下转型。

转型的异常:  

  两个类型没有任何继承关系,不符合类型转换的定义。为了避免ClassCastException的发生,Java提供了instanceof关键字,给引用变量做类型校验。

格式:  

          变量名   instanceof   数据类型
                先拿变量名与数据类型判断
                如果变量名属于该类型数据   返回true
                如果变量名不属于该数据类型  返回false

  

 

  

原文地址:https://www.cnblogs.com/rxqq/p/13922457.html