JAVA多态学习2

原创 2015年07月07日 16:59:34

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

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

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在对象类型的强制转换,先判断是否是某种类型,是的话再强制转换成改类型。

Multimodal Deep Learning(多模态深度学习)未完待续

摘要:      提出一种在深度网络上的新应用,用深度网络学习多模态。特别的是,我们证明了跨模态特征学习——如果在特征学习过程中多模态出现了,对于一个模态而言,更好的特征可以被学习。此外,我们展示了如...
  • s2010241013
  • s2010241013
  • 2016年06月22日 08:53
  • 7953

Java学习一般要多长时间

Java学习一般要多长时间
  • javaniuniu
  • javaniuniu
  • 2016年07月25日 12:16
  • 8481

Java多线程学习(吐血超详细总结)

本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。...
  • Evankaka
  • Evankaka
  • 2015年03月14日 13:13
  • 67559

java学习之路 之 高级类特性1-多态、重写-练习题2

public class Computer { private double cpu; private int memory; private int disk; private doub...
  • OnlyLove_longshao
  • OnlyLove_longshao
  • 2016年08月07日 21:44
  • 680

Java入门学习(2)多态的理解

Java入门学习(二)多态的理解 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。 多态存在的三个必要条件 **一、要有继承; 二、要有重写; 三、父...
  • RLYanzi
  • RLYanzi
  • 2015年12月21日 17:05
  • 195

Java学习总结3——多态2(深入理解Java多态性)

出处:http://developer.51cto.com/art/200906/130414.htm 深入理解Java多态性
  • gaohe7091
  • gaohe7091
  • 2014年06月14日 21:39
  • 335

Java 学习课件,继承和多态

  • 2014年08月24日 22:08
  • 761KB
  • 下载

指导学习2--继承多态

  • 2008年07月12日 20:50
  • 58KB
  • 下载

java基础2:接口,多态

接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。...
  • qq_37755661
  • qq_37755661
  • 2017年11月14日 14:50
  • 29

java 类的继承和多态 2

1,编写一个圆锥类,能够计算圆锥的体积,要求圆锥类的构造函数中有一参数是圆类的一个对象。package d;public class Yuan { int r; fin...
  • wilver
  • wilver
  • 2016年06月10日 20:10
  • 174
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA多态学习2
举报原因:
原因补充:

(最多只允许输入30个字)