码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA多态学习2

时间:2015-07-07 19:37:02      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:java   多态   向上转型   向下转型   

好啦,这里紧接着上次没说的向下转型,请读者结合上次讨论的向上转型的例子一起探讨(其实本次代码也有加上,放心)。

我们这里希望从向下转型会出现的两种基本情况进行探讨

package downcasting;


//动物类Animal父类
class Animal{
    String name;
    int age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    //动物会叫
    public void cry(){
        System.out.println("不知道怎么叫");
    }
    //动物吃东西
    public void eat(){
        System.out.println("不知道吃什么");
    }
}
//创建Dog子类并extends继承Animal父类及覆盖cry方法
class Dog extends Animal{
    //狗叫
    public void cry(){                         //覆盖父类方法
        System.out.println("汪汪叫");
    }
    //狗吃东西
    public void eat(){                          //覆盖父类方法
        System.out.println("狗爱吃骨头");        
    }
    public void bite(){

        System.out.println("狗会咬人...");
    }
}

public class Downcasting {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根

           Animal g1=new Dog();  //向上转型
           g1.cry();
           g1.eat();
           /*
            * 情况一:如果父类引用的对象如果引用的是指向的子类对象,
            * 那么在向下转型的过程中是安全的。也就是编译运行是不会出错误的
            */
           Dog dog=(Dog)g1;         //向下转型,编译和运行皆不会出错
           dog.cry();

           dog.eat();

           Animal g2=new Animal();

           /*
            *情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,
            *编译不会出错,但是运行时会出现java.lang.ClassCastException错误。
            *它可以使用instanceof来避免出错此类错误。
            * */

         /*
          *错误如下: Exception in thread "main" java.lang.ClassCastException:
          *         downchange.Animal cannot be cast to downchange.Dog
                    at downchange.Downchange.main(Downchange.java:62)


           Dog dog1=(Dog)g2;
           dog1.cry();
           dog1.eat();

           */


           if(g2 instanceof Dog){

                    Dog dog1=(Dog)g2;
                    dog1.cry();
                    dog1.eat();
           }
           else if(g2 instanceof Animal){
               System.out.println("g2是Animal的实例");}

           //Dog g3=new Animal();   //不存在从Animal转换到Dog
    }

}

技术分享

ps:
instanceof:
1.用instanceof来测试它所指向的对象是否是某个类。
2.instanceof在对象类型的强制转换,先判断是否是某种类型,是的话再强制转换成改类型。

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA多态学习2

标签:java   多态   向上转型   向下转型   

原文地址:http://blog.csdn.net/u011446963/article/details/46791619

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!