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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李慧兵 中级黑马   /  2015-9-27 22:34  /  338 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多态:可以理解为事物存在的多种体现形态。
人:男人,女人
动物:猫,狗
猫 x=new 猫();
动物 x=new 猫();
1,多态的体现(父类的引用指向了自己的子类对象,父类的引用也可以接收自己的子类对象。)

2,多态的前提。
       必须是类与类之间有关系。要么继承,要么实现。
      通常还有一个前提:存在覆盖。  
3,多态的好处。
     多态的出现大大的提高了程序的拓展性。
4,多态的弊端。
     提高了拓展性,但是只能使用父类的引用访问父类中的成员。
5,多态的引用。




abstract class Animal
{
     public abstract void eat();
}

class Cat extends Animal
{
     public void eat()
     {
          System.out.println("吃鱼");
     }
     public void catchMouse()
     {
          System.out.println("抓老鼠");
     }
}


class Dog extends Animal
{
          public void eat()
     {
          System.out.println("吃骨头");   
     }
     public void kanJia()
     {
          System.out.println("看家");
     }
}
class Pig extends Animal
{
     public void eat()
     {
          System.out.println("饲料");
     }
     public void gongDi()
     {
          System.out.println("拱地");
     }
}

class DuoTaiDemo
{
     public static void main(String[] args)
     {
          //Cat C=new Cat();
          //C.eat();
          //Dog d=new Dog();
          //d.eat();
          /*Cat c=new Cat();
          function(new Cat());
          function(new Dog());
          function(new Pig());
          */
          /*
          Animal a=new Cat();//类型提升,猫提升为动物。向上转型。
          a.eat();
          //如果想要调用猫的特有方法时,如何操作?
          //强制将父类的引用转成子类类型。
          Cat c=(Cat)a;//父类的引用(Cat)a向下转型转成猫。
          c.catchMouse();
          //千万不要出现这样的操作,就是将父类对象转成子类类型。
          //我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。
          //多态自始至终都是子类对象在做着变化。
          //Animal a=new Animal();
          //Cat c=(Cat)a;
          毕姥爷 x=new 毕老师();
          x.讲课();
          毕老师 y=(毕老师)x;
          y.看电影();
          */
          function(new Dog());
          function(new Cat());
     }
     public static void function(Animal a)
     {
          a.eat();
          if(a instanceof Cat)//进行判断是否是猫。
          {
               Cat c=(Cat)a;
               c.catchMouse();
          }
          else if(a instanceof Dog)//进行判断是否是狗。
          {
               Dog c=(Dog)a;
               c.kanJia();
          }
     }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马