A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 千山万水 中级黑马   /  2015-8-21 18:11  /  278 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. 多态的应用


  2. abstractclass Animal {
  3.         public abstractvoid eat();
  4. }
  5. class Cat extends Animal  {   
  6.         public void eat(){   
  7.                 System.out.println("吃鱼");   
  8.         }   
  9.         public void catchMouse()  {   
  10.                 System.out.println("抓老鼠");   
  11.         }   
  12. }   
  13. class Dog extends Animal  {   
  14.         public void eat()  {   
  15.                 System.out.println("吃骨头");   
  16.         }   
  17.         public void kanJia()  {   
  18.                 System.out.println("看家");   
  19.         }   
  20. }   
  21. class Pig extends Animal  {   
  22.         public void eat()  {   
  23.                 System.out.println("饲料");   
  24.         }   
  25.         public void gongDi()  {   
  26.                 System.out.println("拱地");   
  27.         }   
  28. }   
  29.    
  30. class DuoTaiTest   {   
  31.         public static void main(String[] args)   {   
  32.                 Animal a = new Cat();
  33.                 //类型提升。 向上转型。 父类类型指向子类对象  
  34.                 a.eat();  //吃鱼
  35.    
  36.                 //如果想要调用猫的特有方法时,如何操作?   
  37.                 //强制将父类的引用。转成子类类型。向下转型。   
  38.                 Cat c = (Cat)a;   
  39.                 c.catchMouse(); //抓老鼠
  40.    
  41.                 //不要出现这样的操作,就是将父类对象转成子类类型。   
  42.                 //我们能转换的是父类应用指向了自己的子类对象时。
  43.                 //该应用可以被提升,也可以被强制转换。   
  44.                 //多态自始至终都是子类对象在做着变化。   
  45.                 //      Animal a = new Animal();   
  46.                 //      Cat c = (Cat)a;   
  47.                   
  48.    
  49.                 /*  
  50.                 父 x = new 子();  
  51.   
  52.                 x.工作();  
  53.   
  54.                 子 y = (子)x;  
  55.   
  56.   
  57.                 y.玩();  
  58.                 */   
  59.                 function(new Cat());
  60.                 function(new Dog());   
  61.                 function(new Pig());   
  62.    
  63.    
  64.             }   
  65.             public static void function(Animal a){//Animal a = new Cat();   
  66.                 if(!(a instanceof Animal)) {  
  67.                     System.out.println("类型不匹配");  
  68.                 }  
  69.                 else{
  70.                         a.eat();
  71.                         if(a instanceof Cat)  {   
  72.                                 Cat c = (Cat)a;   
  73.                                 c.catchMouse();   
  74.                         }
  75.                         else if(a instanceof Dog)  {   
  76.                                 Dog c = (Dog)a;
  77.                                 c.kanJia();
  78.                         }
  79.                        else if (ainstanceof Pig()){
  80.                                 Pig p = (Pig)a;
  81.                                 a.gongDi();
  82.                         }
  83.                 }
  84.                 //instanceof : 用于判断对象的类型。  
  85.                //对象 intanceof 类型(类类型 接口类型)   
  86.            }   
  87. }   
复制代码

1 个回复

倒序浏览
学得这么快,我才到编程基础阶段
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马