Java6:多态

来源:互联网 发布:软件开发管理名词解释 编辑:程序博客网 时间:2024/06/05 20:32
一、多态的分类
对象的多态性:动物 x = new ();
函数的多态性:函数重载、重写

 

二、多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的对象

 

三、多态的前提
必须是类与类之间只有关系,要么继承或实现
通常还有一个前提,存在覆盖

四、多态的好处
多态的出现大大的提高了程序的扩展性

五、多态的弊端
只能使用父类的引用访问父类的成员

六、代码示例

[java] view plain copy
  1. abstract class Animal  
  2. {  
  3.     abstract void eat();  
  4. }  
  5.   
  6. class Cat extends Animal  
  7. {  
  8.     public void eat()  
  9.     {  
  10.         System.out.println("吃鱼");  
  11.     }  
  12.     public void catchMouse()  
  13.     {  
  14.         System.out.println("抓老鼠");  
  15.     }  
  16. }  
  17.   
  18. class Dog extends Animal  
  19. {  
  20.     public void eat()  
  21.     {  
  22.         System.out.println("吃骨头");  
  23.     }  
  24.     public void kanJia()  
  25.     {  
  26.         System.out.println("看家");  
  27.     }  
  28. }  
  29.   
  30. class DuoTaiDemo  
  31. {  
  32.     public static void main(String[] args)  
  33.     {  
  34.         function(new Cat());  
  35.         function(new Dog());  
  36.   
  37.         Animal a = new Cat();//向上转型  
  38.         a.eat();  
  39.   
  40.         Cat c = (Cat)a;//向下转型  
  41.         c.catchMouse();  
  42.     }  
  43.   
  44.     public static void function(Animal a)  
  45.     {  
  46.         a.eat();  
  47.         //用于子类型有限  
  48.         //或判断所属类型进而使用其特有方法  
  49.         if(a instanceof Cat)  
  50.         {  
  51.             Cat c = (Cat)a;  
  52.             c.catchMouse();  
  53.         }  
  54.         else if(a instanceof Dog)  
  55.         {  
  56.             Dog c = (Dog)a;  
  57.             c.kanJia();  
  58.         }  
  59.     }  
  60. }  

运行结果:



一、多态的分类

对象的多态性:动物 x = new ();
函数的多态性:函数重载、重写

 

二、多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的对象

 

三、多态的前提
必须是类与类之间只有关系,要么继承或实现
通常还有一个前提,存在覆盖

四、多态的好处
多态的出现大大的提高了程序的扩展性

五、多态的弊端
只能使用父类的引用访问父类的成员

六、代码示例

[java] view plain copy
  1. abstract class Animal  
  2. {  
  3.     abstract void eat();  
  4. }  
  5.   
  6. class Cat extends Animal  
  7. {  
  8.     public void eat()  
  9.     {  
  10.         System.out.println("吃鱼");  
  11.     }  
  12.     public void catchMouse()  
  13.     {  
  14.         System.out.println("抓老鼠");  
  15.     }  
  16. }  
  17.   
  18. class Dog extends Animal  
  19. {  
  20.     public void eat()  
  21.     {  
  22.         System.out.println("吃骨头");  
  23.     }  
  24.     public void kanJia()  
  25.     {  
  26.         System.out.println("看家");  
  27.     }  
  28. }  
  29.   
  30. class DuoTaiDemo  
  31. {  
  32.     public static void main(String[] args)  
  33.     {  
  34.         function(new Cat());  
  35.         function(new Dog());  
  36.   
  37.         Animal a = new Cat();//向上转型  
  38.         a.eat();  
  39.   
  40.         Cat c = (Cat)a;//向下转型  
  41.         c.catchMouse();  
  42.     }  
  43.   
  44.     public static void function(Animal a)  
  45.     {  
  46.         a.eat();  
  47.         //用于子类型有限  
  48.         //或判断所属类型进而使用其特有方法  
  49.         if(a instanceof Cat)  
  50.         {  
  51.             Cat c = (Cat)a;  
  52.             c.catchMouse();  
  53.         }  
  54.         else if(a instanceof Dog)  
  55.         {  
  56.             Dog c = (Dog)a;  
  57.             c.kanJia();  
  58.         }  
  59.     }  
  60. }  

运行结果:


原创粉丝点击