多态及其多态类型转换

来源:互联网 发布:怎样申请淘宝子账号 编辑:程序博客网 时间:2024/06/06 02:17
1、多态是建立在继承的基础上,有两种方式,一是引用的多态,二是方法的多态
2、细分:引用的多态仅有两种,父类指向自己或者子类。但是绝不可以子类的引用指向父类;
方法的多态存在三种,第一种是当父类引用指向自己的时候访问重写的方法是访问父类的,
第二种是父类引用指向子类的时候访问重写的方法是访问子类的,
第三种如果子类没有重写的方法,此时父类引用指向子类,虽然访问了方法,但是结果依旧是指向父类中的方法,是继承的方法。
多态要注意 的细节:
1.  多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
2.  多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
3.  多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
4.  多态情况下,不能访问子类特有的成员。
总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。
多态中引用类型转换
1:向上类型转换(隐式/自动类型转换),是小类型到大类型的转换。
2:向下类型转换(强制类型转换),大类型到小类型。
3:instanceof运算符,来解决引用对象的类型,避免类型转换的安全性的问题。
      Dog dog=new Dog();
     Animal animal=dog;//向上类型转换
     Dog dog2=(Dog)animal;//向下类型转换
     Cat cat=(Cat)animal;//报错,开辟的是Dog类型;编译时是Cat类型,运行时是Dog类型
进行判断,避免发生这种情况
  if(animal instanceOf Cat){
      Cat cat=(Cat)animal;
     }else{
     System.out.println("不能进行类型转换!");
    }
原创粉丝点击