多态和向上向下转型

public class TestFeed {
    /*
     * 多态的概念:在既定的场合表现出来的多种形态
     * 
     * 使用多态的方式:
     * 1.将方法中的形参用父类对象指定
     * 2.子类重写父类中的相关方法
     * 3.使用时传入子类对象
     * 
     * 还可以将父类作为返回类型实现多态
     * 
     */
    public static void main(String[] args) {
        PetOwner po = new PetOwner();
        /*Dog dog = new Dog();
        po.feed(dog);
        
        Cat cat = new Cat();
        po.feed(cat);*/
        //向上转型,将子类对象转为父类对象
    /*
     * 向上转型时,子类会自动完成转换
     * 
     */
        Pet p1 = new Dog();
        Pet p2 = new Cat();
        /*子类除了从父类继承方法或重写相关方法之外
         * 还可以有属于自身的方法
         * 如果用了向上转型,那么此时的子类对象就已经变成了
         * 父类对象,这个时候时不能调用子类那个属于自己的方法了
         * 如果要用则必须将对应的这个父类降级(向下转型)为子类对象
         * 
         * 向下转型需要进行强制类型转型
         * 注意:如果对应的父类类型和子类类型不匹配就会抛异常
         *  java.lang.ClassCastException(类抛出了异常)
         *  
         *  可以通过 instanceof关键字来对需要转换的父类对象进行判断
         *  看它是否是属于某个子类的一个实例(对象)
         *  
         *  对象  instanceof 类或者接口
         *  
         *  判断当前对象是否是后面对应的类或接口的一个实例
         *  如果是是返回true,否则返回false
         *  
         *  
         */
        if (p2 instanceof Dog) {
            Dog dog = (Dog) p2;
            dog.guardYard();
        } else {
            System.out.println("对象p2不是狗的一个实例对象,不能完成强转");
        }
        
        po.feed(p1);
        
        //Pet p = po.getPetById(1); // Pet p = new Dog();
        

    }

}

 

posted @ 2016-08-12 10:24  tt香薷  阅读(98)  评论(0)    收藏  举报