黑马程序员技术交流社区

标题: 多态-----转型 [打印本页]

作者: 追逐    时间: 2014-3-15 14:33
标题: 多态-----转型
/*
如果想调用猫的特有方法时,如何操作?
强制将父类的引用。转成子类类型。向下转型

千万不要出现这样的操作。就是将父类对象转成子类类型。
我们能转换的是父类指向了子类的对象是时,该应用可以被提升。也可以强制转换
多态自始至终都是子类对象在做着变化。
*/
//建立一个动物类
abstract class Animal {
        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 ZhuanXingDemo {
        public static void main(String[] args) {
                Animal c = new Cat();
                Animal d = new Dog();
                Animal p = new Pig();
                funEat(c);
                funEat(d);
                funEat(p);
        }
       
        //写一个函数可以输出子类调用父类的函数内容
        public static void funEat(Animal a) { //Animal a = new Cat(Dog, Pig)();
                a.eat();
               
                if(a instanceof Cat) { //如果传进来的数据属于猫类型。就通过关键字instanceof判断
                        Cat c = (Cat)a;
                        c.catchMouse();
                } else if(a instanceof Dog) { //如果传进来的数据属于狗类型。就通过关键字instanceof判断
                        Dog g = (Dog)a;
                        g.kanJia();
                } else if(a instanceof Pig) {
                        Pig p = (Pig)a;
                        p.gongDi();
                }
               
        }
       
}




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