java多态情况下通过类型转换访问子类特有的成员

目前多态情况下不能访问子类特有的成员。

如果需要访问子类特有的成员,那么需要进行类型强制转换.

基本数据类型的转换
小数据类型-------->大的数据类型      自动类型转换
大数据类型--------->小数据类型       强制类型转换     小数据类型  变量名 = (小数据类型)大数据类型;


引用数据类型的转换
小数据类型--------->大数据类型     自动类型转换。
大数据类型--------->小数据类型      强制类型转换

类型转换最场景的问题: java.lang.ClassCastException。 强制类型转换失败。

 

  1. //动物类  
  2. abstract class Animal{  
  3.   
  4.     String name;  
  5.   
  6.     public Animal(String name){  
  7.         this.name = name;  
  8.     }  
  9.   
  10.     public abstract void run();  
  11. }  
  12.   
  13. //老鼠  
  14. class  Mouse extends Animal{  
  15.   
  16.   
  17.     public Mouse(String name){  
  18.         super(name);  
  19.     }  
  20.       
  21.     public  void run(){  
  22.         System.out.println(name+"四条腿慢慢的走!");  
  23.     }  
  24.   
  25.     //老鼠特有方法---打洞  
  26.     public void dig(){  
  27.         System.out.println("老鼠在打洞..");  
  28.     }  
  29. }  
  30.   
  31.   
  32.   
  33. //鱼  
  34. class Fish extends Animal{  
  35.   
  36.     public Fish(String name){  
  37.         super(name);  
  38.     }  
  39.   
  40.     public  void run(){  
  41.         System.out.println(name+"摇摇尾巴游啊游 !");  
  42.     }  
  43.   
  44.   
  45.     //吹泡泡  
  46.     public void bubble(){  
  47.         System.out.println(name+"吹泡泡...!");  
  48.     }  
  49.   
  50. }  
  51.   
  52.   
  53.   
  54.   
  55. class Demo2   
  56. {  
  57.     public static void main(String[] args)   
  58.     {  
  59.         /* 
  60.         Animal a = new Mouse("老鼠");  //多态 
  61.         //调用子类特有的方法 
  62.         Mouse m  = (Mouse)a;  //强制类型转换 
  63.         m.dig(); 
  64.         */  
  65.   
  66.         Mouse m = new Mouse("米老鼠");  
  67.         Fish f = new Fish("草鱼");  
  68.   
  69.         print(f);  
  70.   
  71.     }  
  72.   
  73.   
  74.     //需求: 定义一个函数可以接收任意类型的动物对象,在函数内部要调用到动物特有的方法。  
  75.     public static void print(Animal a){ // Animal a   = new Mouse("米老鼠");  
  76.         if(a instanceof Fish){  
  77.             Fish f = (Fish)a;  
  78.             f.bubble();  
  79.         }else if(a instanceof Mouse){  
  80.             Mouse m = (Mouse)a;  
  81.             m.dig();  
  82.         }  
  83.     }  
  84.   
  85.   
  86. }  

运行结果:

posted @ 2016-11-23 15:13  天涯海角路  阅读(72)  评论(0)    收藏  举报