黑马程序员技术交流社区

标题: 多态 [打印本页]

作者: yangshibai    时间: 2015-9-7 22:13
标题: 多态
/*
        猫 x = new 猫 ();

        动物 x = new 猫(); //一个对象,两种形态。

        猫这类事物既具备猫的形态,又具备动物的形态,这就是对象的多态性。

        简单说:就是一个对象对应着不同类型。

        多态在代码中的体现:父类或者接口的引用指向其子类的对象。

        多态的好处:
                                提高了代码的扩展性,前期定义的代码可以使用后期的内容。

        多态的弊端:
                                前期定义的内容不能使用后期子类的特有内容。
               
        多态的前提:
                                1.必须有关系,继承或实现。
                                2.要有覆盖。
*/


abstract class Animal
{
        abstract void eat();
}

class Dog extends Animal
{
        void eat()
        {
                System.out.println("啃骨头");
        }
        void lookHome()
        {
                System.out.println("看家");
        }
}

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

class Pig extends Animal
{
        void eat()
        {
                System.out.println("吃饲料");
        }
        void GongDi()
        {
                System.out.println("拱地");
        }
}


class DuoTaiDemo
{
        public static void main(String[] args)
        {
                //Cat c = new Cat();
                //c.eat();
                //c.CatchMouse();
                Animal a = new Cat();//自动类型提升,猫对象提升了动物类型,但是特有功能
                                    //无法访问,作用就是限制对特有功能的访问。
                                                        //专业讲:向上转型。
                //a.eat();
                //如果还想用具体动物猫的特有功能,可以将对象进行向下转型。

                //Cat c = (Cat)a; //向下转型的目的是为了使用子类中的特有方法。
                //c.eat();
                //c.CatchMouse();

                //注意:对于转型,自始自终都是子类对象在做着类型的变化。
                //   Animal a1 = new Dog();
                //   Cat c1 = (Cat)a1;  // ClassCastException  类型转换异常

                method(new Dog());
        }
        public static void method(Animal a)
        {
                a.eat();
                if(a instanceof Cat)
                {
                        Cat c = (Cat)a;
                        c.CatchMouse();
                }
                else if(a instanceof Dog)
                {
                        Dog d = (Dog)a;
                        d.lookHome();
                }
    }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2