CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

关于上朔造型的思考!有点地方想不明白

楼主wanglei810522()2004-11-03 03:53:52 在 Java / J2SE / 基础类 提问

假设现在有一只猫和一只狗,现在将它们全都上朔成动物这种类型,那么当我将狗强制转换成猫时,编译器就会抛出异常,既然狗已经上朔成动物了,也就是说已经没有了狗的特征,那么编译器又是根据什么判断这是一只狗而不是猫呢? 问题点数:0、回复次数:4Top

1 楼yangjuanli(珂儿)回复于 2004-11-03 08:35:47 得分 0

友情UP!Top

2 楼wanglei810522()回复于 2004-11-03 17:29:33 得分 0

怎么没人回答?Top

3 楼wanglei810522()回复于 2004-11-03 22:06:52 得分 0

是懒得回答还是也像我不清楚呢?Top

4 楼zcjl()回复于 2004-11-03 23:13:41 得分 0

虽然上溯为父类对象了,但自己的特征(属性和方法)并没有消失,所以不能随意转化成其他不同的派生类  
   
  比如我们规定动物这个类,它有跑、跳、吃、叫四个特征  
  再定义一个黄狗类,它继承并覆盖了动物的跑、跳、吃、叫四个特征,并且还扩展出自己的属性--黄毛  
  我们看到一条具体的黄狗时,我们可以说这是一条狗,也可以说这是一只动物  
  但无论我们用什么概念去称呼它,在我们面前的“黄狗”这个实质没有任何变化  
  不会因为我们说它是动物,它的“黄毛”这个属性就消失了,“狗叫”这个方法就还原成了动物类中定义的“动物叫”  
  所以如果这时我们让眼前这只上溯回动物概念的事物发出叫声的话,得到的结果仍然会是狗叫声  
   
  因此,如果我们强制这个“黄狗”的实质在被回溯到动物层后再转换成猫类动物,并且还想让它发出猫叫声,这显然是不可能的,是非法的  
   
   
  也许可以这样理解:  
  我们把一个具体的派生类对象上溯成基类时,其实只是从概念的层次上去约束了它应该暴露的属性和方法等特征。  
   
   
  最后用一个示例程序说明:  
  package   com.zcjl.test;  
   
   
  public   class   TestClass   {  
   
          public   static   void   main(String[]   args)   {  
                  Object   obj1   =   new   String("A   String   Object");  
                  System.out.println(obj1.toString());  
   
                  Object   obj2   =   new   TestClass();  
                  System.out.println(obj2.toString());  
   
                  //System.out.println((String)   obj2);   //   非法,因为TestClass和String虽然同样继承自Object,但却不是String类及其派生类的实例  
                  //System.out.println(obj2.show());   //   非法,因为Object类没有定义show()方法  
   
                  System.out.println((obj1   instanceof   String));  
                  System.out.println((obj2   instanceof   TestClass));  
          }  
   
          public   String   toString()   {  
                  return   "A   TestClass   Object";  
          }  
   
          public   String   show()   {  
                  return   "TestClass.show()";  
          }  
  }  
   
  执行的结果是:  
  A   String   Object  
  A   TestClass   Object  
  true  
  trueTop

相关问题

  • 思考
  • 不明白
  • 不明白!
  • 不明白!
  • 不明白!
  • 不明白?
  • 我不明白。
  • 不明白!
  • 搞不明白?
  • 不明白JDK???

关键词

  • 属性
  • 狗
  • 动物
  • testclass
  • 上溯
  • 派生
  • 特征
  • 定义
  • 类
  • obj2

得分解答快速导航

  • 帖主:wanglei810522

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo